我需要从两列中选择文本,但也需要按 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
ORDER BY
子句的结构类似于 SELECT
子句,而不是 WHERE
子句。他们有一个逗号分隔的列列表。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