См. Образец данных ниже.
Вот что у меня есть на данный момент.
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
логика выборки данных: Я хочу вернуть все строки из таблиц table1 и table2. Я также хотел бы получить общее количество комментариев из comment_table, связанных с каждой строкой из table1 и table2, и, наконец, подсчитать общее количество строк, возвращенных из table1 и table2.
table1 и table2 имеют "page_type", в этом случае table1 - "nofun", а table2 - "fun". Каждая строка comment_table связана либо с table1, либо с table2 своим "page_type" И "page_id", идентификатором строки table1 или table2.
table1 id: 2 имеет один комментарий (comment_table id: 6), а table2 id: 1 - один комментарий (comment_table id: 5).
В таблице желаемых результатов показаны две образцы строк с «материалом» из таблиц table1 и table2, а также количество комментариев для каждой строки и общее количество строк.
Я не думаю, что полностью понимаю левое соединение. Как я могу достичь своей цели?
Выполнено. Спасибо за предложение.
Какова корреляция между вашими выборочными данными и ожидаемым результатом. Пожалуйста, уточните логику в вопросе
Выполнено. Спасибо за предложение.
Желаемый результат не соответствует ни данным образца, ни вашему описанию. Откуда проявляется "бла-бла"? Это не часть ваших данных выборки. «Я хочу вернуть все строки из таблиц table1 и table2» Где это можно увидеть? Откуда взялось "row_count"? Я не вижу ни комментария, ни идентификатора таблицы, ни строки таблицы, где у вас есть что-то со счетчиком 2 и что-то со счетом 0. Кроме того, вы, вероятно, захотите добавить group_by, если вы используете count (хотя я не уверен, что вы группируете по).
Обычно: если у вас есть страницы двух разных типов, поместите их в одну таблицу и добавьте для нее столбец page_type. Затем добавить тип страницы так же просто, как найти для него третье слово, и вам не нужно добавлять новую таблицу и изменять каждый имеющийся у вас запрос (например, добавление еще одного объединения).
@Solarflare, спасибо, что заглянули. Я исправил данные о желаемых результатах выше (было уже поздно, и мне следовало ждать публикации). «Row_count» есть в каждом выбранном выше, и в желаемых результатах «row_count» равно 2, потому что были возвращены две строки. Пожалуйста, дайте мне знать, если я могу добавить что-нибудь, чтобы прояснить что-то непонятное.






БОЛЬШОЕ спасибо @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.
Спасибо всем, кто нашел время, чтобы просмотреть мой вопрос, и, конечно же, тем, кто нашел время, чтобы прокомментировать.
Примеры данных и желаемые результаты действительно помогут.