0

我有一个名为的表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 查询?

谢谢!

4

3 回答 3

4

这将返回您想要的结果。这使用一个WHERE子句返回具有所需值的所有记录,然后计算不同的值以确保只有 3 个:

select user_id
from user_meta
where value in ('Green', 'Square', 'Big')
group by user_id
having count(distinct value) = 3

请参阅带有演示的 SQL Fiddle

于 2013-02-12T22:00:58.297 回答
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')
)
于 2013-02-12T21:44:46.943 回答
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'

于 2013-02-12T21:57:59.700 回答