动态查询从关系记录表中选择多个条目

时间:2016-01-28 20:09:58

标签: php mysql many-to-many

我们假设我有一张表格,用于存储产品及其类别之间的关系:

p_id | c_id
-----+-----
  1  |  1
  1  |  2
  2  |  1
  2  |  2
  2  |  3
  3  |  2

如您所见,产品可能有多个类别。如何搜索分配了类别1和2的产品?我能想到的最接近的是使用JOIN:

SELECT a.p_id
 FROM rel_table a
 JOIN rel table b
   ON a.p_id=b.p_id AND b.c_id=2
WHERE a.c_id=1

虽然这实现了我想要的,但它不实用,因为我的查询将是动态的。如果我必须选择包含3个类别的产品,则需要对查询进行难以更改。

是否有更清洁,更聪明的方法来实现这一目标?我想象选择第一组的东西,然后用另一个类别精炼所需的水平。

1 个答案:

答案 0 :(得分:1)

你应该使用IN或Between来做这些事情。您可以动态创建放在IN/BETWEEN

中的值
SELECT a.p_id
FROM rel_table a
WHERE a.c_id IN (1,2,3)
group by a.p_id
having count(1) = 3
order by a.p_id asc

SELECT a.p_id
FROM rel_table a
WHERE a.c_id between 1 and 3
group by a.p_id
having count(1) = 3
order by a.p_id asc