我要疯了,希望有人能帮我……
我有一个表:
user_skils:
ID | UID | SKILL
1 23 House
2 5 Disco
3 8 Punk
... ... ...
... ... ...
... ... ...现在,我正在构建一个搜索查询,用户可以在其中搜索并过滤出不符合条件的人:
示例搜索:迪斯科、朋克、房子
这意味着我只想要符合这3个标准的用户(有房子、迪斯科和朋克)……我如何通过查询来管理这一点?
就像这样
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个人符合这个标准。
发布于 2013-01-17 07:26:36
按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中是有效的,因为它没有真正的布尔类型。在其他关系数据库中,您必须使用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%' )
) thttps://stackoverflow.com/questions/14369630
复制相似问题