首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql多次查询1个表的同一列

Mysql多次查询1个表的同一列
EN

Stack Overflow用户
提问于 2013-01-17 07:15:13
回答 1查看 407关注 0票数 0

我要疯了,希望有人能帮我……

我有一个表:

代码语言:javascript
复制
user_skils:
ID  | UID | SKILL
1     23    House
2     5    Disco
3     8    Punk
...  ...    ...
...  ...    ...
...  ...    ...

现在,我正在构建一个搜索查询,用户可以在其中搜索并过滤出不符合条件的人:

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

这意味着我只想要符合这3个标准的用户(有房子、迪斯科和朋克)……我如何通过查询来管理这一点?

就像这样

代码语言:javascript
复制
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%

应该会给我一些类似的东西:

代码语言:javascript
复制
Matches | skills_grouped
3         House,Punk,Disco

这意味着有3个人符合这个标准。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 07:26:36

UID对表进行分组,然后筛选出感兴趣的组(即使用HAVING子句):

代码语言:javascript
复制
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表达式:

代码语言:javascript
复制
HAVING   SUM(CASE WHEN SKILL LIKE '%House%' THEN 1 ELSE 0 END) > 0
     AND ...

要获取此类用户的数量,请再次对结果进行分组:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14369630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档