【发布时间】:2020-07-13 14:33:43
【问题描述】:
我有实体Product(映射到表product)具有以下字段:
- createdAt(创建日期)
- numberOfLikes(收到的赞数)
- numberOfComments(收到的 cmets 数)
我需要创建一个分页仪表板,其中包含 每页 20 个元素(并且没有重复)。现在我正在做 3 个不同的查询来提取,然后将以下项目组合到一个列表中:
- 前 10 名最新产品(ORDER BY createdAt DESC)
- 前 5 个最喜欢的产品(按 numberOfLikes DESC 排序)WHERE id NOT IN
- 评论最多的前 5 个产品(按 numberOfComments DESC 排序)WHERE id NOT IN 手动排除第一个和第二个查询中的 ID
我想创建一个查询来提取所有 20 个以前的项目。有可能吗?
我正在将 MySQL 与 Doctrine (Symfony) 一起使用,并且我会对 Doctrine 兼容的解决方案感兴趣。
【问题讨论】:
-
您是否尝试过使用UNION(不确定 Doctrine 是否支持)。
-
不幸的是,Doctrine 不支持
UNION运算符,但这不是主要问题。如果第二个列表包含第一个列表中的元素,UNION 是否不会删除重复项,因此总共少于 20 个项目?谢谢@NigelRen! -
您同时拥有 UNION DISTINCT 和 UNION ALL。
-
但是使用 UNION DISTINCT 我会有少于 20 个项目,使用 UNION ALL 我会有重复项,对吗?我想要 20 件商品,但不能重复。
-
' 如果第二个列表包含第一个列表中的元素,' - 如果您仍然使用 not in..(或不存在)会发生这种情况。