为WHERE条件选择相等数量的记录

时间:2018-10-22 09:18:55

标签: php mysql mysqli

我有一个数据库,其中有超过一百万条记录。我想从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");

/*------------*/

?>

1 个答案:

答案 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 ByDocs中对此进行了很好的讨论:

  

但是,对单个SELECT语句使用ORDER BY意味着   行在最终结果中出现的顺序无关紧要   因为默认情况下UNION会生成无序的行集。因此,   在这种情况下,通常将ORDER BY与   LIMIT,以便用于确定所选行的子集   检索SELECT,即使它不一定会影响   这些行在最终UNION结果中的顺序。如果出现ORDER BY   在SELECT中没有LIMIT的情况下,它已被优化,因为它将具有   反正没有效果。