首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -仅对前3行进行排序

问MySQL -仅对前3行进行排序
EN

Stack Overflow用户
提问于 2019-03-28 00:34:33
回答 2查看 273关注 0票数 5

我的客户想在他的wordpress网站上搜索,显示来自某个特定类别(优质产品)的第三个结果,然后根据相关性对其余的结果进行排序。

它应该是这样的:

搜索:青苹果

  1. 绿色菠萝(优质)
  2. 红苹果(优质)
  3. 苹果派(溢价)
  4. 青苹果
  5. 大青苹果
  6. 小青苹果

我在想,如果有什么东西可以计数选定的行,然后创建如下所示的OrderBy条件:

代码语言:javascript
复制
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次保费之后)需要从字面上选择与搜索匹配的所有内容,这意味着它也可以选择高级职位,因此我不能使用"NOT premium“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-28 00:41:06

我将使用一个UNION查询来选择3种优质产品,然后选择其余的产品:

代码语言:javascript
复制
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会删除重复项,从而防止列表中重复相同的帖子。

票数 3
EN

Stack Overflow用户

发布于 2019-03-28 00:42:55

您可以只需UNION两个查询,比如:

代码语言:javascript
复制
(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负责删除重复的交叉查询。外部查询首先将高级职位放在首位,然后按降序日期下单。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55388497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档