2017-02-20 89 views
0

我想使用多個條件過濾掉表中的數據,所以我使用以下查詢。根據條件數進行排序

SELECT * FROM `usersposts` 
WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%') 
OR LOWER(`fname`) = LOWER('{$keywords}') 
OR LOWER(`title`) = LOWER('{$keywords}')) AND approval=1" 

它按預期工作,但現在我需要根據該行滿足的條件數來對結果進行排序。例如,如果一行滿足所有或語句,那麼它應該在最上面,滿足的單一條件應該在最後。我怎樣才能做到這一點?

什麼我已經試過:

WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%') 
OR LOWER(`fname`) = LOWER('{$keywords}') 
OR LOWER(`title`) = LOWER('{$keywords}')) AND approval=1 
ORDER BY 
    WHEN LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$location}') AND LOWER(`title`) = LOWER('{$keywords}') THEN 1 
    WHEN (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$keywords}')) 
    OR (LOWER(`post_author_fname`) = LOWER('{$keywords}') AND LOWER(`title`) = LOWER('{$keywords}')) 
    OR (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`title`) = LOWER('{$keywords}')) THEN 2 
    ELSE 3 END 
ASC; 

有沒有簡單的方法嗎?

回答

1

每個條件的計算結果爲true/false,這相當於MySQL中的1/0。您可以使用條件總和按照匹配條件的數量進行排序。

+0

這看起來很簡單:) –

1

我想你可以通過該列 總結你的條件,另一列和順序,因爲喜歡和=將返回0和1

+0

感謝您的寶貴信息:) –

1

您可以使用這樣的事情:

SELECT * 
    FROM `usersposts` 
WHERE 
    (LOWER(`content`) LIKE LOWER('%{$keywords}%') 
OR 
    LOWER(`fname`) = LOWER('{$keywords}') 
OR 
    LOWER(`title`) = LOWER('{$keywords}')) 
AND 
    approval=1 
ORDER BY (
    IF((LOWER(`content`) LIKE LOWER('%{$keywords}%') ,1,0) 
    + IF(LOWER(`fname`) = LOWER('{$keywords}') ,1,0) 
    + IF(LOWER(`title`) = LOWER('{$keywords}')) ,1,0) 
    ) DESC 
; 
+0

感謝它的工作 –

相關問題