我正在寻找关于查询多个表的一些输入,
我目前有一个包含当天的列表,(每天报告的位置。)
$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的每日结果?
如果其他人有不同的方法可以实现这一点,也很好奇吗?
答案 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_*
函数已弃用。它们不再受支持,安全漏洞也没有打补丁。我强烈建议您切换到PDO或MySQLi扩展程序。它们为PHP提供了更好的安全性和性能解决方案。
旁注
通过查看您的代码我真的不明白,为什么你有几个表都声明相同的列?这对我来说似乎是多余的,但也许我缺乏更多的洞察力。只维护一个表会更有效。
我希望这可以帮助指导您,快乐编码!