1

我在数据库中有两个表:

  • 条目(ID、距离、状态[、...])
  • entrymeta(ID,entry_ID,元键,元值)

到目前为止,我选择这样的条目:

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) 中。

我的问题是找到正确的数据库查询。它应该将元值字段与复选​​框数组匹配,然后从提供所有这些服务的第一个表中选择所有条目。我一直在尝试“LEFT JOIN ON entries.ID = entriesmeta.entry_ID”和几个 WHERE 子句,但没有成功。我想知道是否有人可以提供帮助。

提前谢谢你 - 很抱歉我的英语不好。

4

2 回答 2

5
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具有metakeyofservice和 value( s ) of 的内容7, 13, 9, 27

于 2013-09-23T21:31:12.400 回答
2

这将为您提供所有entries具有给定entriesmeta服务价值的人-我认为您要问的是。

 SELECT entries.* from entriesmeta
 INNER JOIN entries on entries.ID = entriesmeta.entry_ID
 WHERE entriesmeta.metavalue = <myValue>
于 2013-09-23T21:30:37.900 回答