2
SELECT *
FROM `cms_goods`
WHERE rank < 20
     OR rank > 20
LIMIT 10

此代码仅返回 10 条排名字段小于 20 的记录。我希望查询同时显示小于和大于记录。(限 10 人)

4

5 回答 5

5

尝试联合:

SELECT * FROM `cms_goods` WHERE 
rank < 20 LIMIT 5
UNION ALL
SELECT * FROM `cms_goods` WHERE 
rank > 20 LIMIT 5
于 2013-03-04T18:36:41.540 回答
5

您可以使用 UNION ALL

(SELECT * FROM `cms_goods` WHERE rank < 20 LIMIT 5)
UNION ALL 
(SELECT * FROM `cms_goods` WHERE rank > 20 LIMIT 5)
于 2013-03-04T18:37:12.073 回答
2

最好的方法是通过一个可以节省几毫秒的子查询,但不幸的是 mySQL 还不支持子查询中的 LIMIT 功能。

所以你最好的选择是使用这样的联合:

SELECT * FROM `cms_goods` WHERE 
rank < 20 LIMIT 5
UNION ALL
SELECT * FROM `cms_goods` WHERE 
rank > 20 LIMIT 5

例如:

$query = mysq_query("SELECT * FROM `cms_goods` WHERE rank < 20 LIMIT 5 UNION ALL SELECT * FROM `cms_goods` WHERE rank > 20 LIMIT 5");

说明:第一个查询将获得 5 个顶部结果,最后一个查询将获得底部 5 个结果,然后 UNION ALL 将它们连接成一个结果。

PS:不要忘记将评论标记为答案,以有帮助的为准。

于 2013-03-06T18:41:28.730 回答
0

您可以使用

LIMIT 10, 20

接下来将从第 10 行和 20 行中选择

于 2013-03-04T18:35:57.367 回答
0

子查询可能吗?

SELECT * FROM cms_goods WHERE id IN (SELECT id FROM cms_goods WHERE rank < 20 LIMIT 10) OR id IN (SELECT id FROM cms_goods where rank > 20 LIMIT 10)
于 2013-03-04T18:35:58.023 回答