已解决 - 请参阅下面的 Bish
我有一个全部转储到 $fruitid[] 的复选框列表和一个多对多表 1:
BoxID FruitID
01 01
01 02
02 01
02 03
02 04
03 02
etc. etc.
我希望用户选中他们想要的每个水果旁边的框,然后查询以拉出每个框的列表,其中包含所有选定的水果(其他水果也可以,这是最低要求,不是精确的内容搜索)。
我的 PHP工作得很好,但我对我认为是一个简单的 MySQL 字符串感到困惑。基本上如果我
SELECT boxid FROM table1 WHERE fruitid=$fruitid1 AND fruitid=$fruitid2 AND etc.
在输入所有检查数据之前,我最终没有结果,因为没有一行包含超过一个 fruitid。这有意义吗?
我能想到的唯一解决方案是一堆嵌套的 select 语句,每个语句都会缩小前一个子集的结果池,直到您搜索完原始数组中的所有值。这似乎既占用大量 CPU 资源又编码起来很麻烦。
有没有更好的办法?
最佳答案
基于当前的建议,您应该能够通过简单地添加 GROUP BY 和 HAVING 子句来获得您正在寻找的内容:
SELECT boxid FROM table1 WHERE fruitid IN ($fruitid1, $fruitid2, ...) GROUP BY boxid HAVING COUNT(*) = $selectedFruitCount;
通过按 boxid 分组并添加 COUNT(),您可以获得每个盒子包含的“有趣”水果的数量。如果该计数等于所选水果的总数,则该框必须包含每个所选水果(可能更多)。请记住,这是假设 boxid 和 fruitid 的组合是唯一的。
关于mysql - 多对多表并使用数组查询同一变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665149/