Объедините количество mysql (*) для двух разных таблиц в одном столбце

У меня есть две таблицы, в которых хранятся комментарии двух разных пользователей.

Table1

id_table1 | comment | id_user | id_post

Table2

id_table2 | comment | id_someOtherUser | id_post

Я действительно хотел бы сделать только одну таблицу из этих двух, потому что комментарии публикуются в одном и том же сообщении, но я не могу, потому что у меня есть два разных идентификатора для двух разных пользователей.

Мой вопрос: как я могу составить список всех сообщений DESC по количеству комментариев, объединенных из двух таблиц?

Если я сделаю что-то вроде

SELECT P.*, count(*) as count from Table1 AS T1
LEFT JOIN post AS P ON T1.id_post = P.id_post GROUP BY P.id_post ORDER BY count DESC

Затем у меня есть сообщения для таблицы 1, то же самое можно сделать и для таблицы 2, но как я могу объединить комментарии из обеих таблиц для одного и того же сообщения?


person PoolDead    schedule 09.01.2018    source источник
comment
Вы можете использовать UNION.   -  person NetMage    schedule 09.01.2018


Ответы (2)


Я бы использовал UNION ALL, чтобы объединить две таблицы комментариев в общий формат, а затем сделал бы JOIN:

SELECT P.*, TC.count
FROM (
    SELECT Ts.id_post, count(*) AS count
    FROM (
          SELECT id_post FROM Table1
          UNION ALL
          SELECT id_post FROM Table2
    ) AS Ts
    GROUP BY Ts.id_post
) AS TC
LEFT JOIN post AS P ON TC.id_post = P.id_post
GROUP BY P.id_post
ORDER BY TC.count DESC
person NetMage    schedule 09.01.2018
comment
Это именно то, что я искал, спасибо! Я сам пробовал UNION ALL, но это не сработало, так как я делал это только с одним внешним SELECT, поэтому мне не хватало id_post - person PoolDead; 09.01.2018
comment
Три SELECT, несомненно, были излишними, но я чувствовал, что так будет легче понять. - person NetMage; 09.01.2018

Один из способов решить эту проблему - выполнить отдельные подсчеты для каждой таблицы, затем выполнить полное внешнее соединение и получить сумму каждого из подсчетов:

SELECT id_post, (count1 + count2) AS total_count FROM (SELECT id_post, count(*) as count1 from Table1 AS T1 FULL OUTER JOIN (SELECT id_post, count(*) as count2 from Table2 AS T2) USING(id_post)) ORDER BY total_count DESC

person mr_snuffles    schedule 09.01.2018