mysql - 多对多表并使用数组查询同一变量

标签 mysql many-to-many

已解决 - 请参阅下面的 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/

相关文章:

mysql - 通过 Linux 终端创建 MySQL 数据库并通过 phpMyAdmin 连接它

java - 尝试将新数据添加到我的表之一时出错

python - django Manytomany 对象的字段返回空

java - Hibernate和Mysql,事务自动提交只是一个部分

mysql - 具有外部约束的sql查询

php - 使用 GET 从编码 UTF-8 从 URL 获取值

php - 如何在 Yii2 搜索模型中使用数组进行搜索

mysql - 稍微复杂一点的多对多关系

sql - 跨三个表的 LEFT JOIN(带联结表)

c# - Nhibernate QueryOver - 为多对多关系执行 Has All