微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-如何编写此查询?

我有以下mysql表:

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的行.

解决方法:

sql并不是真正为这样的查询设计的,但是可以做到的.

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 举报,一经查实,本站将立刻删除。

相关推荐