0

結合を使用して、1 つの SQL ステートメントで 2 つのテーブルからデータを取得しようとしています。アイデアは非常に単純です。プロジェクトには参加者がいて、プロジェクトの概要で参加者の数とともにプロジェクト情報を表示したいと考えています。

現在、参加者ありのプロジェクトと参加者なしのプロジェクトの 2 つのプロジェクトがあります。

私はこのクエリを使用します:

SELECT SQL_CALC_FOUND_ROWS `p`.`id`,
       `p`.`title`, 
       `p`.`live`, 
       `p`.`startDate`,
       `p`.`endDate`, 
       COUNT(`part`.`id`) AS `participants`
FROM `projects` `p`
LEFT OUTER JOIN `participants` `part`
    ON `p`.`id`  = `part`.`projectid`
ORDER BY `p`.`live` DESC, 
         `p`.`startDate` DESC
LIMIT 0,10

問題は、このクエリは参加者がいるプロジェクトのみを返し、参加者がいないプロジェクトは除外されることです。

ここで何が間違っていますか?

4

2 に答える 2

4

使用する必要がありますGROUP BY

SELECT SQL_CALC_FOUND_ROWS `p`.`id`,
       `p`.`title`, 
       `p`.`live`, 
       `p`.`startDate`,
       `p`.`endDate`, 
       COUNT(`part`.`id`) AS `participants`
FROM `projects` `p`
LEFT OUTER JOIN `participants` `part`
    ON `p`.`id`  = `part`.`projectid`
GROUP BY `p`.`id`,
         `p`.`title`, 
         `p`.`live`, 
         `p`.`startDate`,
         `p`.`endDate`
ORDER BY `p`.`live` DESC, 
         `p`.`startDate` DESC
LIMIT 0,10

これがSQLFiddleのデモです

于 2013-07-17T07:14:00.567 に答える
3

これは JOIN ではなく、相関サブクエリで行うべきだと思います。

SELECT SQL_CALC_FOUND_ROWS `p`.`id`,
   `p`.`title`, 
   `p`.`live`, 
   `p`.`startDate`,
   `p`.`endDate`, 
   (SELECT COUNT(`part`.`id`) FROM `participants` `part` WHERE `part`.`projectid` = `p`.`id`) AS `participants`
FROM `projects` `p`
ORDER BY `p`.`live` DESC, 
     `p`.`startDate` DESC
LIMIT 0,10
于 2013-07-17T07:11:02.730 に答える