Php 从mysql数据库中选择多个表
我有一个名为atp2的mysql数据库。基本上它保存了过去7年所有网球比赛的所有结果。然而,每年都在不同的表格下。所以我有7张桌子。2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017. 但每次我想问一个问题,我都想同时在所有的表格上问。所以我制作了如下connection.phpPhp 从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中的所有表,而不必逐个选
$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…创建新表时需要更新视图。