2013-02-25 66 views
2

我有一个大型的产品数据库,每个星期天,我的脚本正在激活50个新产品。 的事情是,根据我的脚本中的一些规则,即时通讯寻找一些产品,我应该优先激活。 (对于你的例子,可以说它应该总是优先激活名称为'hello kitty'和'meshuggah'的产品,在其他所有方面)我如何通过优先ID列表对mysql结果进行排序?

我的数据库表包含有关产品的信息和唯一的ID。 可以说,脚本在标题中找到5个这样的id,并且有hello kitty。

因此,我如何使查询,以便优先项目将在上面,然后是id desc?

这里的IM以后有什么一些伪代码:

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,再其次是在产品表中其他ID通过ID进行排序降。

在一个查询中可能吗?

回答

8

使用FIELD

SELECT * 
FROM products 
order by FIELD(id,59,47,28,29,20), id desc 
limit 50 
+0

啊,谢谢,每天学习新东西:)只是不得不添加desc后面的字段或其他字段id出来在底部 – 2013-02-25 14:35:12

+0

@KristianRafteseth这是伟大的':D' – 2013-02-25 14:36:50

+0

请注意,这是可行的,因为FIELD()返回0如果'id'(在这种情况下)的值没有找到。通过使命令DESC将零排序到底部,并使用第二个搜索词(这里是'id')对这些排序。 – 2013-02-25 14:46:38

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.

相关问题