php - MySQL用php同时选择多个id
问题描述
我有以下称为技能的 MySQL 表。
ID | idUser | 技能 |
---|---|---|
1 | 4 | 1 |
2 | 8 | 4 |
3 | 8 | 9 |
4 | 13 | 9 |
5 | 18 | 2 |
6 | 22 | 1 |
7 | 27 | 2 |
8 | 32 | 4 |
9 | 11 | 2 |
10 | 32 | 9 |
例如,我需要选择同时具有 idSkill 4 和 9 的所有 idUser。
结果将是 idUser 8 和 32。
如何使用 PHP 和 MySQL 创建这样的查询?
非常感谢
解决方案
一种简单的方法使用聚合:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
上面的查询是sargable,这意味着适当的索引可以使用该idSkill
列。考虑添加此索引以提高性能:
CREATE INDEX idx ON skills (idUser, idSkill);
编辑:
将此查询用于 3 个项目:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;
推荐阅读
- git - Git diff 与 diff-tree 不同。如何在jgit中做差异树?
- android - Firebase 更改活动
- python - 如何使用 telnetlib python 在 localhost 上查找开放端口?
- mapbox-gl-draw - 如何禁用中点选择,拖动 LineString 类型(draw_line_string 模式)
- split - Hybris 6.6 从一个购物车创建多个订单
- javascript - 如果ng-if parent在angularjs中为false,如何将模型设置为null
- sql - 使用 Group By 创建表
- arduino - 应该是180度的时候伺服到270度
- eclipse - com.netledger.common.exceptions.NLUserError:未找到数据
- javascript - 使用 rtl 方向更改移动设备上的引导列