2013-02-25 81 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.

相關問題