简体   繁体   English

MySQL用php同时选择多个id

[英]MySQL select multiple id at the same time with php

I have the following MySQL table called skills.我有以下 MySQL 表称为技能。

id ID idUser用户名 idSkill技能
1 1 4 4 1 1
2 2 8 8 4 4
3 3 8 8 9 9
4 4 13 13 9 9
5 5 18 18 2 2
6 6 22 22 1 1
7 7 27 27 2 2
8 8 32 32 4 4
9 9 11 11 2 2
10 10 32 32 9 9

I need to select, for example, all idUsers that have idSkill 4 and 9 at the same time.例如,我需要选择同时具有 idSkill 4 和 9 的所有 idUser。

The result would be idUser 8 and 32.结果将是 idUser 8 和 32。

How can I create such a query with PHP and MySQL?如何使用 PHP 和 MySQL 创建这样的查询?

Many thanks非常感谢

One simple approach uses aggregation:一种简单的方法使用聚合:

SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);

The above query is sargable , meaning that an appropriate index can use the idSkill column.上面的查询是sargable ,这意味着适当的索引可以使用idSkill列。 Consider adding this index for added performance:考虑添加此索引以提高性能:

CREATE INDEX idx ON skills (idUser, idSkill);

Edit:编辑:

Use this query for 3 items:将此查询用于 3 个项目:

SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;

you can try this query.你可以试试这个查询。 simply select userIds and add GROUP BY to avoid repeated userIds, and if you're using more skillIds like for example (4,9,2) then change the HAVING COUNT to 3 and so on.只需选择 userIds 并添加 GROUP BY 以避免重复的 userIds,如果您使用更多的技能 ID,例如 (4,9,2) 然后将 HAVING COUNT 更改为 3 等等。

SELECT idUser FROM your_table
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 2

One more solution:另一种解决方案:

SELECT DISTINCT idUser 
FROM tablename t0
WHERE EXISTS ( SELECT NULL
               FROM tablename t1
               WHERE t0.idUser = t1.idUser 
                 AND t1.idSkill = 4 )
  AND EXISTS ( SELECT NULL
               FROM tablename t2
               WHERE t0.idUser = t2.idUser 
                 AND t2.idSkill = 9 )

The solution can be expanded by adding more AND EXISTS () blocks if idSkill values list contains more than 2 values.如果idSkill值列表包含 2 个以上的值,则可以通过添加更多AND EXISTS ()块来扩展该解决方案。

And this query is sargable.这个查询是可查询的。 fiddle 小提琴

您可以使用以下MYSQL查询进行检查:

SELECT DISTINCT(idUser) FROM skill WHERE idSkill IN(4,9)

Try this:试试这个:

SELECT DISTINCT(idUser) FROM skills
WHERE idSkill = 4 and idUser IN(select idUser from skills where idSkill = 9)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM