我的客户希望在他的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
不好。:搜索的其余部分(前3个溢价之后)需要从字面上选择与搜索匹配的所有内容,这意味着它也可以选择溢价帖子,因此,我不能使用“不喜欢{{ 1}}”。
答案 0 :(得分:3)
我将使用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
默认会删除重复项,这样可以防止同一帖子在列表中重复出现。
答案 1 :(得分:3)
您可以UNION
两个查询,例如:
(SELECT p.*, 1 is_premium FROM posts p WHERE category = 'premium' ORDER BY post_date DESC LIMIT 3)
UNION
(SELECT p.*, category = 'premium' FROM posts)
ORDER BY is_premium, post_date DESC
第一个查询选择3个最新的溢价posts
。第二个查询选择所有帖子。 UNION
负责删除查询中的重复项。外部查询将高级职位放在首位,并按降序排列订单。