php - MySQL - 仅对前 3 行进行排序
问题描述
我的客户希望在他的 wordpress 网站上进行搜索,以显示特定类别(高级产品)的前 3 个结果,然后按相关性对其余结果进行排序。
它需要是这样的:
查询词语:青苹果
- 青菠萝(特级)
- 红苹果(高级)
- 苹果派(高级)
- 青苹果
- 大青苹果
- 小青苹果
我在想是否有一些东西可以计算选定的行,然后创建一个如下所示的 OrderBy 条件:
SELECT *
FROM `posts`
ORDER BY (
CASE WHEN `posts.category` LIKE 'premium' AND COUNT(ROW) < 4
THEN 0
ELSE 1
END ),
`posts.post_date` DESC
Obs.:搜索的其余部分(在前 3 个溢价之后)需要从字面上选择与搜索匹配的所有内容,这意味着它也可以选择溢价帖子,所以我不能使用“不喜欢premium
”。
解决方案
我会使用UNION
查询来选择 3 种优质产品,然后选择其余产品:
SELECT *
FROM ((SELECT 1 AS premium, posts.*
FROM posts
WHERE `posts.category` LIKE 'premium'
ORDER BY post_date_desc
LIMIT 3)
UNION
(SELECT 0 AS premium, posts.*
FROM posts)
) p
GROUP BY p.ID
ORDER BY premium DESC, `p.post_date` DESC
UNION
默认情况下会删除重复项,因此它将防止相同的帖子在列表中重复。
推荐阅读
- javascript - 如何解决 responseJSON: {error: "invalid_request", error_description: "Missing required parameter: code"}
- javascript - 插入多行物料表
- r - 如何在 R 中对稀疏矩阵进行交叉制表?
- java - 将数据库异常信息传输到客户端的最佳实践
- spring-boot - 如何避免 Spring 框架中的 CustomConversions 警告
- kubernetes - 为什么当我查询正在运行的 Pod 时,kubectl 返回具有“Terminating”状态的 Pod?
- visual-studio - 如何在 VS2019 中静态链接 OpenSSL 库?
- flutter - 重新启动时在 null 上调用了方法“[]”
- android - 从 AppGallery Connect API 获取错误代码 204144647 并显示消息“新服务无法编辑服务,无法更新”
- matrix - 仅显示此热图的对角线值