[英]MySQL multiple ORDER BY conditions with limit for each condition
我有具有以下字段的实体Product
(映射到表product
):
我需要创建一个分页仪表板,每页有 20 个元素(并且没有重复)。 现在我正在做 3 个不同的查询来提取,然后将以下项目组合在一个列表中:
WHERE id NOT IN
WHERE id NOT IN
我想创建一个查询来提取所有 20 个以前的项目。 可能吗?
我正在使用 MySQL 和 Doctrine (Symfony),我会对一个与Doctrine 兼容的解决方案感兴趣。
我认为不可能在单个查询中完成。 如果总帖子的数量有限(比如仪表板中只有 100 个帖子可见),我会使用数组方法的组合。
这需要使用UNION
,这意味着您不能拥有与 Doctrine 兼容的解决方案。
核心方法与您在应用程序级别所做的相同,只是更丑。 要获得完全相同的行为,您必须执行类似的操作
SELECT [text of first query]
UNION
SELECT [text of second query]
WHERE `id` NOT IN (
SELECT `id` FROM (SELECT [text of first query])
)
UNION
SELECT [text of third query]
WHERE `id` NOT IN (
SELECT `id` FROM (SELECT [text of first query])
)
AND `id` NOT IN (
SELECT (SELECT `id` FROM [text of second query])
)
这意味着第一个查询独立执行了三次,第二个查询执行了两次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.