我有一个名为user_meta
的表,它包含如下数据:
---------------------------
| user_id | field | value |
---------------------------
| 1 | 1 | Green |
| 1 | 2 | Square |
| 1 | 3 | Big |
| 2 | 1 | Red |
| 2 | 2 | Square |
| 2 | 3 | Small |
----------------------------
field
列是用户个人资料中的表单字段的编号。 value
列是用户通过表单提交的值。
如何编写一个MySQL查询来返回所有拥有“绿色大方块”的用户?
谢谢!
答案 0 :(得分:4)
这将返回您想要的结果。这使用WHERE
子句返回具有所需值的所有记录,然后计算不同的值以确保只有3:
select user_id
from user_meta
where value in ('Green', 'Square', 'Big')
group by user_id
having count(distinct value) = 3
答案 1 :(得分:2)
如果你坚持使用该模式,那么使用子查询会有效。但它不会很快。
select userid
from user_meta
where user_id in (
select user_id from user_meta
where (field = 1 and value = 'Green')
)
and user_id in (
select user_id from user_meta
where (field = 2 and value = 'Square')
)
and user_id in (
select user_id from user_meta
where (field = 3 and value = 'Big')
)
答案 2 :(得分:1)
SELECT user_id
FROM user_meta user_meta1
JOIN user_meta user_meta2 ON user_meta1.UserID = user_meta2.UserID
JOIN user_meta user_meta3 ON user_meta2.UserID = user_meta3.UserID
WHERE user_meta1.value = 'Green' AND user_meta2.value='Square' AND user_meta3.value='big'