2016-02-24 36 views
0

我在user表中的記錄按以下方式MYSQL比賽CSV關鍵字列

id name  address keywords 
1  thompsan paris  10,20,30 
2  samson paris  10,20,30 
3  Nilawa paris  10,20,30 
4  Nalama paris  100,30,50 
5  Nalama paris  100,300,20 

我需要得到誰擁有的10或20的關鍵字我寫此查詢的用戶:

SELECT * from User where keywords REGEXP '[[:<:]]10|20[[:>:]]' 

它沒有給我預期的輸出。它應該篩選ID 10或20,並給我輸出記錄1,2,3,5。記錄4在這裏不匹配。

爲什麼它不起作用?有一個更好的方法嗎?

回答

2

試試這個,

SELECT * 
FROM user 
WHERE FIND_IN_SET('10', keywords) > 0 OR 
     FIND_IN_SET('20', keywords) > 0 

FIND_IN_SET是與MySQL

+0

是不是有沒有辦法將一組字符串添加到第一個參數而不添加一個字符串?例如,FIND_IN_SET('10,20',關鍵字) – dev1234

1

重新設計你的數據庫,以便它實際上是在1NF,你將不必處理這些麻煩就更不用說了可怕的內置函數性能和錯誤,它必然會讓你失望。

因爲我知道你不會這樣做,但根本不需要使用REGEXP,假設你的字符串keywords實際上是一致的(如果它不是那麼你就搞砸了)。只需使用LIKE

SELECT -- We'll list out the columns, since we NEVER use SELECT * 
    id, 
    name, 
    address, 
    keywords 
FROM 
    User 
WHERE 
    ',' + keywords + ',' LIKE '%,10,%' OR 
    ',' + keywords + ',' LIKE '%,20,%' 
+0

我試過了,沒有輸出。 SELECT * FROM用戶WHERE','+關鍵字+','LIKE'%,80,%' – dev1234