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

问题描述 投票:0回答:1

我需要从两列中选择文本,但也需要按 pubdate desc 排序。

“标题喜欢?描述喜欢?”在两列中工作,我得到了预期的结果,但是“pubdate”没有按 DESC 排序。

我需要使用标题 LIKE ?和描述喜欢? + 发布 DESC

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
mysql sql full-text-search
1个回答
0
投票
  1. ORDER BY
    子句的结构类似于
    SELECT
    子句,而不是
    WHERE
    子句。他们有一个逗号分隔的列列表。
  2. 诸如
    title LIKE ?
    的表达式在真时产生值
    1
    ,在假时产生
    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。要移植到其他 DBMS,您需要

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
© www.soinside.com 2019 - 2024. All rights reserved.