Php 从mysql数据库中选择多个表

Php 从mysql数据库中选择多个表,php,mysql,Php,Mysql,我有一个名为atp2的mysql数据库。基本上它保存了过去7年所有网球比赛的所有结果。然而,每年都在不同的表格下。所以我有7张桌子。2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017. 但每次我想问一个问题,我都想同时在所有的表格上问。所以我制作了如下connection.php $db = new mysqli("xxx", "xxx", "xxx", "2012"); 有没有一种方法可以让我选择connection.php中的所有表,而不必逐个选

我有一个名为atp2的mysql数据库。基本上它保存了过去7年所有网球比赛的所有结果。然而,每年都在不同的表格下。所以我有7张桌子。2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017. 但每次我想问一个问题,我都想同时在所有的表格上问。所以我制作了如下connection.php

 $db = new mysqli("xxx", "xxx", "xxx", "2012");
有没有一种方法可以让我选择connection.php中的所有表,而不必逐个选择?表中的所有列名都相同。如果有其他更简单的方法,比如加入所有表格,我也可以这样做,但我必须每天都这样做,因为2017年的表格每天都在更新

根据下面的评论,我还有一个head2head.php,我想在这里比较两名球员之间的每场比赛

<br>
<?php echo "Here are the matches " . $_POST[Player1] . " won vs " . $_POST[Player2]; ?> <br>
<?php
        $sql = <<<SQL
       select from ( SELECT *
      FROM 2012
      union all
      SELECT *
      FROM 2013
      union all
      SELECT *
      FROM 2014
      union all
      SELECT *
      FROM 2015
      union all
      SELECT *
      FROM 2016
      union all
      SELECT *
      FROM 2017 ) 
      WHERE t.Winner = "$_POST[Player1]"
      AND t.Loser = "$_POST[Player2]"
SQL;

if(!$result = $conn->query($sql)){
die('There was an error running the query [' . $conn->error . ']');
}

// Output the rows        
while($row = $result->fetch_assoc()){
echo $row[winner_name] . "-" . $row[loser_name] . "<br/>"; 
}
?>

如果表的结构、列位置、名称和数据类型完全相同,则可以使用se和union all

    select col1, col2, col3 ....
    from my_table2010
    union all
    select col1, col2, col3 ....
    from my_table2011
    union all
    select col1, col2, col3 ....
    from my_table2012
    union all
     select col1, col2, col3 ....
    from my_table2013
    union all
    select col1, col2, col3 ....
    from my_table2014
    union all
    ...   
    select col1, col2, col3 ....
    from my_table2017
用mysqli

你应该这样做

// Create connection
$conn = new mysqli($your_servername, $your_username, your_$password, $your_dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "  select col1, col2, col3 ....
          from my_table2010
          union all
          select col1, col2, col3 ....
          from my_table2011
          union all
          select col1, col2, col3 ....
          from my_table2012
          union all
           select col1, col2, col3 ....
          from my_table2013
          union all
          select col1, col2, col3 ....
          from my_table2014
          union all
          select col1, col2, col3 ....
          from my_table2015
          union all
          select col1, col2, col3 ....
          from my_table2016
          union all          
          select col1, col2, col3 ....
          from my_table2017";

$result = $conn->query($sql);      
就你而言

如果您需要使用此sintax的过滤器

   <?php
          $sql = "
          select from ( SELECT *
          FROM 2012
          union all
          SELECT *
          FROM 2013
          union all
          SELECT *
          FROM 2014
          union all
          SELECT *
          FROM 2015
          union all
          SELECT *
          FROM 2016
          union all
          SELECT *
          FROM 2017 ) t 
          WHERE t.Winner = " .  $_POST[Player1] . "
          AND t.Loser = " . $_POST[Player2] ;
你的错误有两个原因 1-因为在联合之后,所有sql都需要选择,而不是在何处,,,
2-如果将位置放在选择的底部,则只过滤此选择,而不过滤联合选择,如果表的结构列位置、名称和数据类型完全相同,则可以使用se和union all

    select col1, col2, col3 ....
    from my_table2010
    union all
    select col1, col2, col3 ....
    from my_table2011
    union all
    select col1, col2, col3 ....
    from my_table2012
    union all
     select col1, col2, col3 ....
    from my_table2013
    union all
    select col1, col2, col3 ....
    from my_table2014
    union all
    ...   
    select col1, col2, col3 ....
    from my_table2017
用mysqli

你应该这样做

// Create connection
$conn = new mysqli($your_servername, $your_username, your_$password, $your_dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "  select col1, col2, col3 ....
          from my_table2010
          union all
          select col1, col2, col3 ....
          from my_table2011
          union all
          select col1, col2, col3 ....
          from my_table2012
          union all
           select col1, col2, col3 ....
          from my_table2013
          union all
          select col1, col2, col3 ....
          from my_table2014
          union all
          select col1, col2, col3 ....
          from my_table2015
          union all
          select col1, col2, col3 ....
          from my_table2016
          union all          
          select col1, col2, col3 ....
          from my_table2017";

$result = $conn->query($sql);      
就你而言

如果您需要使用此sintax的过滤器

   <?php
          $sql = "
          select from ( SELECT *
          FROM 2012
          union all
          SELECT *
          FROM 2013
          union all
          SELECT *
          FROM 2014
          union all
          SELECT *
          FROM 2015
          union all
          SELECT *
          FROM 2016
          union all
          SELECT *
          FROM 2017 ) t 
          WHERE t.Winner = " .  $_POST[Player1] . "
          AND t.Loser = " . $_POST[Player2] ;
你的错误有两个原因 1-因为在联合之后,所有sql都需要选择,而不是在何处,,, 2-如果将位置放在选择的底部,则只过滤此选择,而不过滤联合选择创建视图:

create view v_matches as
    select 2010 as yyyy, t.*
    from matches_2010
    union all
    select 2011 as yyyy, t.*
    from matches_2011
    union all
    . . .;
然后,您可以查询视图,选择所有匹配项或您想要的年份

注意:您可以在数据库中创建视图。然后,您可以像从应用程序访问表一样访问它

实际上,您应该将所有这些信息存储在一个名为matches的表中。只需创建表并将新信息加载到表中,而不是每年创建一个新表。

创建视图:

create view v_matches as
    select 2010 as yyyy, t.*
    from matches_2010
    union all
    select 2011 as yyyy, t.*
    from matches_2011
    union all
    . . .;
然后,您可以查询视图,选择所有匹配项或您想要的年份

注意:您可以在数据库中创建视图。然后,您可以像从应用程序访问表一样访问它



实际上,您应该将所有这些信息存储在一个名为matches的表中。只需创建表并将新信息加载到表中,而不是为每一年创建新表。

是的,您在使用联接的查询中这样做,考虑修改您的架构,有一个表而不是7-是,您在使用联接的查询中这样做,考虑修改您的模式,要使用一个表而不是七个表,我可以在同一行上这样做:$db=new mysqlixxx,xxx,xxx,2012 union all,2013 union all,2014 union all;我正在尝试,但它会出错$sql=update you question添加您正在使用的确切查询和确切的错误消息..我更新了代码,但仍然:运行查询时出错[您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解第1行“from SELECT*from 2012 union all SELECT*”附近要使用的正确语法]回答更新…和一个建议确保正确清理在$\u POST中传递的值…您应该分配给变量..然后清理,然后在select中使用..否则您应该使用PDO..使用bindng准备并执行..但这是另一个问题..希望查询工作..现在我可以在同一行上执行:$db=new mysqlix,x吗xx,xxx,2012 union all,2013 union all,2014 union all;我正在尝试此操作,但它会引发错误。$sql=更新您的问题添加您正在使用的确切查询和确切的错误消息。.我更新了代码,但仍然:运行查询时出错[您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解第1行“from SELECT*from 2012 union all SELECT*”附近要使用的正确语法]回答更新…和一个建议确保正确清理在$\u POST中传递的值…您应该分配给VAR..然后清理,然后在select中使用..否则您应该使用PDO..使用bindng准备并执行..但这是另一个问题..希望查询工作..现在如果我做一个视图,当我上载一个ne时该视图会被更新吗w 2017 table?@Heresh…创建新表时需要更新视图。如果我创建视图,则在上载新2017表时是否会更新视图?@Heresh…创建新表时需要更新视图。