2014-11-06 2 views
0

MySQL MySQL에 대한 질문이 있습니다.MYSQL 쿼리 매칭 카운트

두 개의 쿼리와 일부 PHP가 있는데이 쿼리를 하나의 쿼리로 병합 할 수 있어야한다고 생각합니다.

내가하고 싶은 것은 : 1은 ID = 1

쿼리와 일정을 programm의 모든 모듈을 완료 모든 사용자를 보여 ->이은을 programm의 모든 모듈 제공 :

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

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 -

질의 2>이 사용자 및이 사용자에 의해 완료되는 programm에 모듈의 수를 제공 P는 Query2에서 사용자를 필터링하며 'count'는 Query1의 결과 수와 같습니다.

누구나 제안 사항이 있으십니까?

+0

당신은 현재 쿼리 1을 수행하고 있지만 쿼리 2와 같은 쿼리를 수행하지만 쿼리 1 텍스트가 "Query1"로 대체 된 다음 PHP로 필터링하지만 원하는 것이라고 말하려고합니까? 하나의 검색어로 모두 검색 하시겠습니까? 이 점을 분명히하십시오. – philipxy

답변

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 
) 

는하지만 내부 하위 쿼리를 좋아하지 않는 '곳'또는 'having'섹션을 사용하면 mysql이 때로는 비효율적 인 비효율적 인 작업을 수행하기도합니다.