2014-11-06 116 views
0

我有一個MySQL的問題,我似乎無法弄清楚。MYSQL查詢匹配計數

我有兩個查詢和一些PHP,我認爲它應該可以合併成一個查詢。

我想要做的事情是:表明完成一定PROGRAMM與ID = 1

查詢的所有模塊的所有用戶1 - >這給PROGRAMM的所有模塊:

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

查詢2 - >這給使用者,而且由該用戶完成了PROGRAMM的模塊的數量:

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` 

然後PH P過濾Query2中的用戶,其中'count'等於Query1中的結果數。

任何人有一個建議?

+0

您是否試圖說目前您執行查詢1,然後您執行類似於查詢2的查詢,但將查詢1的文本替換爲「Query1」,然後您使用PHP進行篩選,但是您希望它全部在一個查詢中?請清楚說明。 – philipxy 2014-11-08 05:22:22

回答

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(*)[email protected] ; 

也有使用「子查詢」,而不是變量的可能性:

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有時會因爲這些而決定做不合理的低效率事情。