多表查询

时间:2015-02-24 16:46:22

标签: php mysql arrays foreach

我正在寻找关于查询多个表的一些输入,

我目前有一个包含当天的列表,(每天报告的位置。)

$list = mysql_query("SELECT * FROM list ORDER BY id");

while ($row = mysql_fetch_assoc($list)){
$drop_list[] = $row['day']; 
}

我的最终目标是创建一个查询,检查每个表中的唯一行

我正在考虑这样的事情。

foreach ($drop_list as $v) {
$daily = mysql_query("SELECT * FROM $v WHERE ID = 1");
while ($row = mysql_fetch_assoc($daily)){
    $id     = $row['id'];
    $name   = $row['name']; 
    $age    = $row['age'];
    $day    = $row['day'];
}
echo "<tr><td>$id</td><td>$name</td><td>$age</td><td>$day</td></tr>";       
}

然后将其放入函数中并在表标记之间回显。

我确信代码有效,(还没有测试过从平板电脑输入这个)但是好奇如果在数组中使用foreach项查询来自数据库的数据并将其回显出来给我数组中id的每日结果?

如果其他人有不同的方法可以实现这一点,也很好奇吗?

1 个答案:

答案 0 :(得分:0)

简短回答

foreach循环内运行多个SQL查询会影响性能。有一个更好的解决方案,在一个查询中提取所有内容。数据库查询很昂贵,应尽可能地进行优化,以减少网页的加载时间,并为其他同步请求节省资源。您可以下载MySQL Workbench来帮助编写查询以及使用分析器工具对其进行优化。有很多关于如何在网络上使用这个程序的教程。

可能的解决方案

我假设您知道要查询的表,并且它们的列表在很长一段时间内保持不变。然后,我将使用多个SELECT语句和UNION关键字在一个查询中获取所有内容。这假设不同表中的列是相同的。通过查看代码,它们似乎都声明了所需的列。

SELECT * FROM table1 WHERE id = 1
UNION ALL
SELECT * FROM table2 WHERE id = 1
UNION ALL
SELECT * FROM table3 WHERE id = 1

这将从每个列出的表中获取id等于1的每一行。通过将ALL关键字附加到union语句,我们保证还会返回所有表中的重复行。

此解决方案的一个主要缺点是我们没有参考每行来自哪个表。如果需要这样做,则需要一些更复杂的SQL查询,但我仍然建议将查询合并为一个。

重要!

请注意,mysql_*函数已弃用。它们不再受支持,安全漏洞也没有打补丁。我强烈建议您切换到PDOMySQLi扩展程序。它们为PHP提供了更好的安全性和性能解决方案。

旁注

通过查看您的代码我真的不明白,为什么你有几个表都声明相同的列?这对我来说似乎是多余的,但也许我缺乏更多的洞察力。只维护一个表会更有效。

我希望这可以帮助指导您,快乐编码!