首页 > 解决方案 > 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 创建这样的查询?

非常感谢

标签: phpmysql

解决方案


一种简单的方法使用聚合:

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;

推荐阅读