mysql SQL ORDER BY DESC不使用多个排序选项?

wmomyfyw  于 2023-03-28  发布在  Mysql
关注(0)|答案(1)|浏览(147)

我需要从两列中选择文本,但也要按出版日期顺序排列。
“title LIKE?AND description LIKE?”在两列中工作,我得到了我期望的结果,但是“pubdate”并没有对DESC进行排序。
我需要使用标题喜欢?和描述喜欢?+ pubdate DESC
pubdate是一个时间戳号。

**pubdate现在订购:**旧,新,旧,新,旧
**我需要如何订购:**新,新,旧,旧,旧

我尝试了这个SQL查询,但失败了。

SELECT source,title,description,link,pubdate
FROM feeds
USE INDEX(PRIMARY,idx_title_description)
WHERE MATCH(title,description) AGAINST(? IN BOOLEAN MODE) 
ORDER BY title LIKE ? AND description LIKE ? AND pubdate DESC
LIMIT 60
py49o6xq

py49o6xq1#

  1. ORDER BY子句的结构类似于SELECT子句,而不是WHERE子句。它们具有逗号分隔的列列表。
    1.像title LIKE ?这样的表达式在true时产生值1,在false时产生值0
    因此,如果您想按最近的日期对结果集进行排序,但首先显示匹配的结果集,则需要。
ORDER BY (title LIKE ? AND description LIKE ?) DESC, pubdate DESC

第一个DESC在这里是因为你想要(title LIKE ? AND description LIKE ?)为真的行--值为1--首先,然后是为假的行--0--第二。
true/false::1/0是一个特定于MySQL的hack。

ORDER BY CASE WHEN title LIKE ? AND description LIKE ? THEN 1
              ELSE 0 END  DESC, 
         pubdate DESC

这会将所有匹配的行放在结果集中的第一位,然后是不匹配的行。如果您希望它们按日期排序,并且匹配的行在每个日期中首先显示,请翻转ORDER BY中两项的顺序:

ORDER BY pubdate DESC, (title LIKE ? AND description LIKE ?) DESC

相关问题