считать комментарии для каждой строки Union и Left Join - PullRequest
0 голосов
/ 18 октября 2018

См. Пример данных ниже.

Вот что у меня есть до сих пор.

SELECT 
    table1.stuff, 
    COUNT(table1.id) AS row_count, 
    COUNT(comment_table.id) AS comment_count 

FROM table1 
    LEFT JOIN comment_table 
        ON table1.id = comment_table.page_id 
            AND comment_table.page_type = 'nofun'

UNION 

SELECT 
    table2.stuff, 
    COUNT(table2.id) AS row_count, 
    COUNT(comment_table.id) AS comment_count 

FROM table2 
    LEFT JOIN comment_table 
        ON table2.id = comment_table.page_id 
            AND comment_table.page_type = 'fun' 

Пример таблицы данных1:

id     stuff
1      the stuff
2      other stuff

Пример таблицы данных2:

id     stuff
1      the stuff still
2      other stuff still

Пример данных comment_table:

id     page_id     page_type     comment 
5      1           fun           Ello
6      2           nofun         hey janis

Желаемые результаты:

stuff              comment_count    row_count
the stuff still    1                2
other stuff        1                0 

логика выборочных данных: я хотел бы вернуть все строки из таблицы1 и таблицы2.Я также хотел бы получить общее количество комментариев из comment_table, связанных с каждой строкой из table1 и table2, и, наконец, посчитать общее количество строк, возвращаемых из table1 и table2.

table1 и table2 имеют "page_type"в этом случае table1 - это «nofun», а table2 - «весело».Каждая строка comment_table связана с таблицей table1 или table2 по типу "page_type" И "page_id", идентификатору строки из table1 или table2.

идентификатор table1: 2 имеет один комментарий (идентификатор comment_table: 6) и идентификатор table2: 1 имеет один комментарий (id_table comment: 5).

В таблице желаемых результатов показаны две строки с примерами 'stuff' из table1 и table2, а также количество комментариев для каждой строки и общее количество строк.

Я не верю, что полностью понимаю левое соединение.Как я могу достичь своей цели .?

1 Ответ

0 голосов
/ 18 октября 2018

БОЛЬШОЕ спасибо @Solarflare за указание на отсутствие GROUP BY.

Вот что мне было нужно:

SELECT 
    `table1`.`stuff`, 
    COUNT(`comment_table`.`id`) AS comment_count 

FROM `table1` 
    LEFT JOIN `comment_table` 
        ON `table1.id` = `comment_table`.`page_id` 
            AND `comment_table`.`page_type` = 'nofun' 
GROUP BY `table1`.`id`

UNION 

SELECT 
    `table2`.`stuff`, 
    COUNT(`comment_table`.`id`) AS comment_count 
FROM `table2` 
    LEFT JOIN `comment_table` 
        ON `table2`.`id` = `comment_table`.`page_id` 
            AND `comment_table`.`page_type` = 'fun'
GROUP BY `table2`.`id`

Результаты данных:

stuff              comment_count
the stuff still    1
other stuff        1

Я удалил "row_count", так как данные правильно сгруппированы, я могу получить общее количество строк из $ page-> num_rows.

Спасибо всем, кто нашел время, чтобы просмотреть мой вопрос, и, конечно, тем, кто нашел время, чтобыкомментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...