MYSQL:选择与另一个表的多行相关的条目

时间:2013-09-23 21:26:35

标签: php mysql sql

我在数据库中有两个表:

  • 条目(ID,距离,状态[,...])
  • entriesmeta(ID,entry_ID,metakey,metavalue)

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

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子句,但没有成功。我想知道是否有人可以提供帮助。

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

2 个答案:

答案 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>