2013-01-16 40 views
0

我要瘋了這個希望有人能幫助我....MySQL查詢1代表相同的列多次

我有一個表:

user_skils: 
ID | UID | SKILL 
1  23 House 
2  5 Disco 
3  8 Punk 
... ... ... 
... ... ... 
... ... ... 

現在我正在建立一個搜索查詢在這裏用戶可以搜索和過濾掉不符合條件的人:

示例搜索:迪斯科,朋克,房子

意思,我只是想匹配這個3個指標分析該用戶(有樓AND DISCO和PUNK)... 如何通過查詢來管理這個問題?

喜歡的東西

SELECT count(uid) as matches , 
    GROUP_CONCAT(skill) as skills_grouped 
FROM user_skilks 
WHERE skill LIKE %Disco% 
    AND skill LIKE %punk% 
    AND skill LIKE %house% 

應該給我這樣的:

Matches | skills_grouped 
3   House,Punk,Disco 

意思是說3人符合這個標準......

+0

GROUP BY ... HAVING COUNT(*)= 3 - 爲什麼你使用'%'。只需使用IN('Disco','Punk','House') – Strawberry

+0

我將使用選擇列表來輸入skils。否則,當用戶輸入與您的查詢不完全相同時,您將遇到麻煩。例如,「朋克」與「朋克」不匹配等。 –

+0

'朋克'匹配'朋克'! – Strawberry

回答

1

集團表格由UID,然後過濾生成組(即使用HAVING條款)用於感興趣的人:

SELECT UID 
FROM  user_skils 
GROUP BY UID 
HAVING SUM(SKILL LIKE '%House%') 
    AND SUM(SKILL LIKE '%Disco%') 
    AND SUM(SKILL LIKE '%Punk%') 

這在MySQL中起作用,因爲它沒有真正的布爾類型。在其他RDBMS,你將不得不使用一個CASE表達:

HAVING SUM(CASE WHEN SKILL LIKE '%House%' THEN 1 ELSE 0 END) > 0 
    AND ... 

爲了得到這樣的用戶,組的結果再次數量:

SELECT COUNT(*) FROM (
    SELECT 1 
    FROM  user_skils 
    GROUP BY UID 
    HAVING SUM(SKILL LIKE '%House%') 
     AND SUM(SKILL LIKE '%Disco%') 
     AND SUM(SKILL LIKE '%Punk%') 
) t 
+0

WOrks就像一個魅力!謝謝!! –