map_id - module_id - category_id
1 - 3 - 6
2 - 3 - 9
3 - 3 - 11
4 - 4 - 6
5 - 4 - 9
6 - 4 - 12
map_id是主键.我在数组中有一个category_id列表.
我选择的标准是:
>如果category_id数组包含6,9,则应同时返回两个module_id = 3、4.
>如果category_id数组包含6,9,11,则仅返回module_id = 3
现在,如果我运行一个简单的WHERE … IN查询,则会选择所有行,这不是我想要的.
编辑:其实我正在寻找一个更动态的解决方案.可能我的问题不清楚(这是我的第一个问题).
说我有这些category_id:
$猫=数组(6,9)
如果我查询
“从可映射的WHERE category_id IN(” .implode(‘,’,$cat).“中选择SELECT module_id.”)“
然后我得到的行具有module_id 3和4.
另一方面,如果数组是
$猫=数组(6,9,11)
并且我运行相同的查询,我再次得到相同的结果.但这次我只希望module_id = 3的行.
解决方法:
SELECT module_id FROM
(SELECT module_id FROM table WHERE category_id = 6) cat_6
JOIN (SELECT module_id FROM table WHERE category_id = 9) cat_9 USING (module_id)
JOIN (SELECT module_id FROM table WHERE category_id = 11) cat_11 USING (module_id)
确保在category_id,module_id上有一个索引,并在module_id,category_id上有第二个索引.理想情况下,您可以创建那些唯一索引.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。