2016-03-05 69 views
1

我有一個SQL字段定義爲set('nightlife', 'food', 'sports', 'culture', 'movies', 'general')查詢SQL設置

現在我想運行一個查詢,我通過例如nightlife,food和我想要的結果包含所有記錄中,其中含有類夜生活或食物。因此,例如nightlife,culture,sports的記錄也應歸還,因爲它包含夜生活。我不知道如何運行這個。我試圖用以下方式使用IN關鍵字:

'SELECT ... FROM table WHERE '$category' IN Categories 但是,這是行不通的。

UPDATE

運行下面的查詢建議回答:

SELECT * 
 
FROM images 
 
WHERE id = '2650225' 
 
AND WHERE FIND_IN_SET('sports', Categories) >0 
 
OR FIND_IN_SET('nightlife', Categories) >0 
 
ORDER BY delete_at ASC 
 
LIMIT 10 
 
OFFSET 0

接收以下錯誤:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE find_in_set('sports', Categories) > 0 or find_in_set('nightlife', Categori' at line 1 
+0

一種選擇是使用'FIND_IN_SET( '夜生活',類別)> 0或FIND_IN_SET( '食物',類別)> 0'。您無法同時搜索多個值 - 您需要使用「或」。 – sgeddes

+0

好吧,如果我在'夜生活,食物'中尋找'夜生活'這項工作還是必須搜索'夜生活,食物'來匹配? – Alk

+0

我認爲你需要使用'find_in_set'或'like' - 我不認爲'in'會在搜索集合時起作用。 – sgeddes

回答

1

您可以使用find_in_setor

select * 
from yourtable 
where find_in_set('nightlife', categories) > 0 or 
     find_in_set('food', categories) > 0 

根據您的編輯,你不能有多個where條款。另外你需要周圍使用or標準括弧:

SELECT * 
FROM images 
WHERE id = '2650225' AND 
    (FIND_IN_SET('sports', Categories) > 0 OR 
    FIND_IN_SET('nightlife', Categories) >0) 
ORDER BY delete_at ASC 
LIMIT 10 
OFFSET 0 
+0

我收到一個錯誤,請檢查更新 – Alk

+0

您不能多次使用'where'關鍵字... – sgeddes

+0

@mankee - 您還需要在'或'標準周圍使用括號。 – sgeddes