我有一个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的结果数。
有人有建议吗?
答案 0 :(得分:0)
看起来我第一次没有理解你的问题。另一个尝试,使用两个查询和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
)
但我不喜欢里面的子查询'其中'或者'因为这些部分,mysql有时会决定做一些不合理的低效事情。