我有这个mysql表结构:
------------------------------------
| item_id | meta_key | meta_value |
------------------------------------
159 category Bungalow
159 location Lagos
159 price 45000
160 category Bungalow
160 location Abuja
160 price 53500
...
350 category Bungalow
350 location Lagos
350 price 32000
我想要做的是根据meta_key
列选择符合两个或更多条件的多行。例如,假设我想为位于'拉各斯'的每个'平房'选择item_id
。我该怎么做呢?
这是我的尝试,但无效:
SELECT `item_id` FROM `item_meta`
WHERE
`meta_key` = 'category' AND `meta_value` = 'Bungalow'
AND
`meta_key` = 'location' AND `meta_value` = 'Lagos'
任何帮助将不胜感激。
答案 0 :(得分:1)
如果您希望找到符合这两个标准的记录,可以采用这种方式
select `item_id` FROM `item_meta`
where
( `meta_key` = 'category' and `meta_value` = 'Bungalow' )
or
( `meta_key` = 'location' AND `meta_value` = 'Lagos' )
group by `item_id` having count(*)=2
答案 1 :(得分:0)
请尝试使用括号,否则您将无法获得预期结果:
SELECT `item_id` FROM `item_meta`
WHERE
(`meta_key` = 'category' AND `meta_value` = 'Bungalow')
OR
(`meta_key` = 'location' AND `meta_value` = 'Lagos')
答案 2 :(得分:0)
一种方法是通过您感兴趣的2个属性独立选择。通过将表连接到自身,您可以找到共享2个参数的条目(按item_id)。
以下内容:
select category.item_id
from item_meta category
join item_meta location on location.item_id = category.item_id
where location.meta_key = 'location' AND location.meta_value = 'Lagos'
and category.meta_key = 'category' AND category.meta_value = 'Bungalow'
group by category.item_id