我在数据库中有两个表:
到目前为止,我选择了这样的条目:
SELECT ID,
distance
FROM entries
WHERE status = '2' HAVING distance < 30
ORDER BY distance
LIMIT 20
现在,第二个表包含这种数据:
ID | entry_ID | metakey | metavalue
1 | 137 | service | 13
2 | 137 | service | 7
3 | 137 | service | 76
4 | 84 | service | 23
etc.
第一个表中的条目是餐馆,第二个表中的服务是他们提供的服务。我现在尝试了一段时间是这样的:创建一个HTML搜索表单,让用户通过复选框选择某些服务。然后,MYSQL查询应选择提供所有这些服务的所有条目。到目前为止,搜索表单将所选服务放在一个数组中(7,13,9,27)。
我的问题是找到正确的数据库查询。它应该将metavalue-field与checkbox-array匹配,然后从第一个表中选择所有条目,这些条目提供所有这些服务。我一直在尝试“LEFT JOIN ON entries.ID = entriesmeta.entry_ID”和几个WHERE子句,但没有成功。我想知道是否有人可以提供帮助。
提前谢谢你 - 抱歉我的英语不好。
答案 0 :(得分:3)
SELECT e.ID
FROM entries e
INNER JOIN entriesmeta m
ON e.ID = m.entry_id
WHERE
m.metakey = 'service' AND
m.metavalue IN (7,13,9,27)
GROUP BY e.ID
HAVING COUNT(DISTINCT m.metavalue) = 4
此查询将显示ID
metakey
service
的所有7, 13, 9, 27
和{{1}}的值( s )。
答案 1 :(得分:2)
这将为您提供具有给定entries
服务价值的所有entriesmeta
- 这是我认为您要问的。
SELECT entries.* from entriesmeta
INNER JOIN entries on entries.ID = entriesmeta.entry_ID
WHERE entriesmeta.metavalue = <myValue>