gpt4 book ai didi

MYSQL 查询匹配计数

转载 作者:行者123 更新时间:2023-11-29 23:28:12 25 4
gpt4 key购买 nike

我有一个 MySQL 问题,我似乎无法弄清楚。

我有两个查询和一些 PHP,我认为应该可以将其合并到一个查询中。

我想做的是:显示完成 id=1 的某个程序的所有模块的所有用户

查询 1 -> 这给出了程序的所有模块:

SELECT `id` 
FROM `modules`
JOIN `linkModuleProgramm` ON `module`.`id` = `linkModuleProgramm`.`module`
WHERE `linkModuleProgramm`.`programm` = 1

查询 2 -> 这给出了用户以及该用户完成的程序模块的数量:

SELECT `user`.`id`, 
COUNT(*) as 'count'
FROM `user`
JOIN `linkUserModule` ON `user`.`id` = `linkUserModule`.`user`
WHERE `linkUserModule`.`status` = 1
AND `linkUserModule`.`module` IN (Query1)
GROUP BY `user`.`id`

然后 PHP 过滤 Query2 中的用户,其中“count”等于 Query1 的结果数。

有人有建议吗?

最佳答案

看来我第一次没有理解你的问题。另一种尝试,使用两个查询和 MySQL 变量:

SET @MODULESCOUNT = (
SELECT COUNT(*)
FROM `modules`
JOIN `linkModuleProgramm` ON `module`.`id` = `linkModuleProgramm`.`module`
WHERE `linkModuleProgramm`.`programm` = 1
);
SELECT `user`.`id`,
FROM `user`
JOIN `linkUserModule` ON `user`.`id` = `linkUserModule`.`user`
WHERE `linkUserModule`.`status` = 1
AND `linkUserModule`.`module` IN (Query1)
GROUP BY `user`.`id`
HAVING COUNT(*)=@MODULESCOUNT ;

还可以使用“子查询”代替变量:

SELECT `user`.`id`, 
FROM `user`
JOIN `linkUserModule` ON `user`.`id` = `linkUserModule`.`user`
WHERE `linkUserModule`.`status` = 1
AND `linkUserModule`.`module` IN (Query1)
GROUP BY `user`.`id`
HAVING COUNT(*)=
(
SELECT COUNT(*)
FROM `modules`
JOIN `linkModuleProgramm` ON `module`.`id` = `linkModuleProgramm`.`module`
WHERE `linkModuleProgramm`.`programm` = 1
)

但我不喜欢“where”或“having”部分中的子查询,mysql有时会因为它们而决定做一些不合理的低效事情。

关于MYSQL 查询匹配计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26783725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com