2015-11-03 50 views
2

我有一個用於搜索功能的Mysql SELECT查詢,如果它們與db中的ID匹配,我想檢查一個ID數組。MYSQL ORDER BY CASE 1st CASE應按ID排列

我的客戶希望它以特定的方式排序,所以我將不得不使用ORDER BY CASE,但我似乎無法弄清楚如何將其與ID數組組合。我嘗試使用FIELD函數,但是這似乎不能與ORDER BY CASE結合使用。

有人有什麼建議嗎?

我的ORDER BY至今:

ORDER BY 
      CASE 
       WHEN FIELD(p.ID, $implodedArray) THEN '0' 
       WHEN p.post_title LIKE '%$keyword%' THEN '1' 
       WHEN pm.meta_value LIKE '%$keyword%' THEN '2' 
       WHEN p.post_content LIKE '%$keyword%' THEN '3' ELSE '4' END, 
+0

在php中使用in_array來知道哪些id應該具有更高的優先級並從此處獲取它。 – Mihai

+0

@Mihai取決於結果的大小,可能是一個巨大的時間沉沒 –

回答

1

您可以使用find_in_set()

ORDER BY 
    CASE 
     WHEN FIND_IN_SET(p.ID, $implodedArray) THEN 0 
     WHEN p.post_title LIKE '%$keyword%' THEN 1 
     WHEN pm.meta_value LIKE '%$keyword%' THEN 2 
     WHEN p.post_content LIKE '%$keyword%' THEN 3 
     ELSE 4 
    END 

這是假設你被引爆你的陣列,像這樣

implode(',', $some_array); 

的原因是因爲FIND_IN_SET使用逗號分隔的字符串aka .. '1,2,3,4,5'

+0

我猜find_in_set是快速發展) – Mihai

+0

@Mihai它不算太糟糕,因爲它的順序與桌上的單一掃描。 –

+0

非常感謝,這解決了我的問題:) – Lennart