这一定是很平常的事情,但是我没有运气谷歌搜索。

我有一个类别表:

Table A
catid | text
1     | Category A
2     | Category B
3     | Category C


然后将此表连接到一张地图,该地图可跟踪照片所在的类别

Table B
catid | photoid
1     | 1
2     | 1
1     | 2
3     | 3


我需要做的是过滤查询,以便仅返回选择的每个类别中的照片。例如:


如果用户选择类别A和B,则返回照片1。
如果用户仅选择类别A,则返回照片1和2。
如果用户选择类别A,B和C-我什么也不会返回。


谢谢你提供的所有帮助。

-马特

最佳答案

最简单的方法之一是:

SELECT
    *
FROM
    B
WHERE
    B.catid IN (1, 2)
GROUP BY
    B.photoid
HAVING
    COUNT(B.photoid) = 2


要匹配3个类别,您需要执行以下操作:

SELECT
    *
FROM
    B
WHERE
    B.catid IN (1, 2, 3)
GROUP BY
    B.photoid
HAVING
    COUNT(B.photoid) = 3


您也可以多次连接同一张表。或执行子查询。我将测试几种不同的方法,以查看哪种方法对您的数据集执行最快。

关于php - 通过多个值过滤一对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21531809/

10-11 03:07