2

我有一个大型产品数据库,每个星期天,我的脚本都会激活 50 种新产品。问题是,根据我脚本中的一些规则,我找到了一些我应该优先激活的产品。(例如,假设它应该始终优先激活名称为“hello kitty”和“meshuggah”的产品,然后再进行其他操作)

我的 db 表包含有关产品的信息和唯一 ID。假设脚本找到了其中的 5 个 ID,标题中有 hello kitty。

那么,我该如何进行查询,以便优先项排在最前面,然后是 id desc?

这是我之后的一些伪代码:

SELECT * FROM products order by (id='59', id='47', id='28', id='29', id='20'), id desc limit 50

结果应该首先给我 id 59、47、28、29 和 20,然后是 products 表中按 id 降序排序的其他 id。

这可能在一个查询中吗?

4

2 回答 2

8

利用FIELD

SELECT * 
FROM products 
order by FIELD(id,59,47,28,29,20), id desc 
limit 50
于 2013-02-25T14:26:40.553 回答
1

实际上,您的伪代码也非常接近这样的查询:

SELECT *
FROM products
order by id='59' desc, id='47' desc, id='28' desc, id='29' desc, id='20' desc, id desc
limit 50

这使用了条件评估为 0 或 1 的事实。

于 2013-02-25T15:10:36.450 回答