已解决 - 请参阅下面的Bish
我有一个所有转储到$ fruitid []和多对多table1的复选框列表:
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.
直到输入所有已检查的数据我最终没有结果,因为没有SINGLE行包含多个fruitid。这有意义吗?
我能想到的唯一解决方案是一堆嵌套的select语句,每个语句都缩小了前一个子集中的结果池,直到你搜索原始数组中的所有值。这似乎是CPU密集型和代码繁琐。
有更好的方法吗?
答案 0 :(得分:1)
如果你将你的AND改为OR,我想你会做你正在做的事情。从概念上讲,将select读作“选择具有property1 AND property2 AND ...”的行,而不是“选择具有property1的行,还选择具有property2的行,等等。”
编辑:更紧凑,你可以使用
SELECT boxid FROM table1 WHERE fruitid IN ($fruitid1,$fruitid2,...)
答案 1 :(得分:1)
您可能想要重新考虑您的数据库(或者我不确定您在尝试什么)。但是从你发布的SQL看起来你可以这样做:
SELECT boxid FROM table1 WHERE fruitid in ($fruitid1,$fruitid2);
答案 2 :(得分:1)
在当前建议的基础上,您应该只需添加GROUP BY和HAVING子句即可获得所需内容:
SELECT boxid FROM table1 WHERE fruitid IN ($fruitid1, $fruitid2, ...) GROUP BY boxid HAVING COUNT(*) = $selectedFruitCount;
通过boxid分组并添加COUNT(),您可以获得每个框包含的“有趣”水果数量。如果该计数等于所选择的水果总数,那么该方框必须包含每个选定的水果(可能还有更多)。请记住,这假设boxid和fruitid的组合是唯一的。
答案 3 :(得分:1)
SELECT boxid FROM table1
WHERE fruitid IN ($fruitid1, $fruitid2,)
你能给出你想要的更多解释吗?从你的问题我明白我认为这应该有效。