2013-07-30 30 views
1

我有一堆不同的標籤和類別的CMS。我明明使用的每個類別作爲一個唯一的ID,並將其保存在數據庫中,像這樣:MYSQL LIKE類別返回錯誤的查詢,由於%

cats -> 2,15,115 
tags -> 13,33,113 

這是一個簡單的例子。

我有,當我想說明一個GET變量$貓相關的內容在我的查詢中使用的問題:

WHERE cats LIKE '%$cat%' 

這裏是挑戰,如果$貓=「5」,那麼它返回,5,15,55,115 ...等等。我只需要它匹配'5'而沒有別的!

我確定我錯過了一些真的很簡單的東西。

編輯: find_in_set工作得很好。然而,我的另一個挑戰是我的$ GET變量有時是這樣的:$cat = 150,181

那麼,如何使用變量$ cat來查看是否只有其中一個匹配?我想要匹配查詢中的150或181嗎?

+0

如果你正在尋找一個更有限的搜索,有點可控性,我會建議看看在MySQL中的REGEXP。就搜索而言,它會給你很大的靈活性。這裏是鏈接到文檔,讓你開始:http://dev.mysql.com/doc/refman/5.1/en/regexp.html – Cameeob2003

回答

2

可以使用FIND_IN_SET()因爲列cats有這些值2,15,115

SELECT * FROM tableName WHERE FIND_IN_SET('5', cats) > 0 
+0

所以我可以使用SELECT * FROM tableName WHERE FIND_IN_SET('$ cat',貓')> 0 – eberswine

+1

是的,另一種選擇是'SELECT * FROM tableName WHERE CONCAT(',',cats',')LIKE CONCAT('%,','$ cat',',%「)' –

+0

好,好的東西! – eberswine

2

如果使用LIKE用通配符 '%' 您擴展搜索包含「5所有的值'在你的基礎上放你的%。

%值%(cointaining) %值(最終與價值) 值%(與價值開始)

您可以使用諸如平等,根本就沒有使用%,但我建議你用等號操作(=)

+0

+1。 –

+0

謝謝Rajeev! –

+0

是的,這也是非常有意義的 – eberswine