我有一个数据库,其中有超过一百万条记录。我想从3种不同情况的数据库中获取相同数量的记录。我目前正在使用执行3个MySQL查询的代码。我想知道是否有可能使用一个SELECT查询获得相同的结果?。
以下代码为每个站点= X条件选择相等数量的20条记录。
<?php
/*---------*/
$db1 = mysqli_query($connect, "SELECT * FROM news WHERE site='1' ORDER BY id DESC LIMIT 0,20");
$db2 = mysqli_query($connect, "SELECT * FROM news WHERE site='2' ORDER BY id DESC LIMIT 0,20");
$db3 = mysqli_query($connect, "SELECT * FROM news WHERE site='3' ORDER BY id DESC LIMIT 0,20");
/*------------*/
?>
答案 0 :(得分:5)
您可以使用UNION ALL
组合多个Select查询的结果。我们需要确保在所有Select查询中返回的列数都相同。
(SELECT * FROM news WHERE site='1' ORDER BY id DESC LIMIT 0,20)
UNION ALL
(SELECT * FROM news WHERE site='2' ORDER BY id DESC LIMIT 0,20)
UNION ALL
(SELECT * FROM news WHERE site='3' ORDER BY id DESC LIMIT 0,20)
现在,请始终记住,UNION的结果将始终是无序数据集。万一您打算将最终结果按id
进行排序;您可以在末尾添加一个明确的Order By
。 Docs中对此进行了很好的讨论:
但是,对单个SELECT语句使用ORDER BY意味着 行在最终结果中出现的顺序无关紧要 因为默认情况下UNION会生成无序的行集。因此, 在这种情况下,通常将ORDER BY与 LIMIT,以便用于确定所选行的子集 检索SELECT,即使它不一定会影响 这些行在最终UNION结果中的顺序。如果出现ORDER BY 在SELECT中没有LIMIT的情况下,它已被优化,因为它将具有 反正没有效果。