mysql объединяет четыре таблицы и подсчитывает результаты по порядку

0

Я работаю над Mysql, чтобы получить трендовые должности

Я присоединяюсь к четырем табличным сообщениям, posts_like, posts_shares, posts_comments и выделяет user_id. (post like, акции и комментарии должны быть добавлены для общего количества)

Я ожидаю результата этого, например, только

RESULT:
post_id | user_id | count of shares, like, comments
---------------------------------------------------
  1     |     2    |      50                      |
  8     |     5    |      47                      |
---------------------------------------------------

структура таблицы

table users
---------------------
id | username | etc |
---------------------

table posts
-------------------------------------
id |  user_id | content | datecreated
-------------------------------------

post_likes
--------------------------------
id | post_id | user_id         |
--------------------------------

post_shares
--------------------------------
id | post_id | user_id         |
--------------------------------

comments
---------------------------------------
id | post_id | user_id | description  |
--------------------------------------

user_id должен быть разным

Теги:

2 ответа

1
Лучший ответ

Вы можете использовать левое соединение и подсчитать отдельную группу на основе p.id, p.user_id, u.username

select p.id as post_id, p.user_id, u.username
    , count(distinct l.user_id)
    , count(distinct s.user_id)
    , count(distinct c.user_id)
    , ifnull(count(distinct l.user_id),0) + 
      ifnull(count(distinct s.user_id),0) + 
      ifnull(count(distinct c.user_id),0) total
from post p 
inner join users u  on u.id = p.user_id 
left join post_likes l on l.post_id = p.id 
left join post_shares s on s.post_id = p.id  
left join comments c on c.post_id = p.id 
group by  p.id, p.user_id, u.username
order by total desc 
  • 0
    ты забыл положить тебя здесь? пользователи внутреннего соединения на u.id = p.user_id должны быть пользователи u на u.id?
  • 0
    @KonjeshEsbrading правильных пользователей у .. спасибо ..
Показать ещё 6 комментариев
0

Чтобы получить count of shares, like, comments, я предлагаю вам использовать UNION над этими тремя таблицами.

Что-то вроде (проверьте синтаксис):

SELECT post_id, user_id, count(post_id) From (
SELECT post_id, user_id FROM post_likes
UNION
SELECT post_id, user_id FROM post_shares
UNION
SELECT post_id, user_id FROM comments) Group by post_id, user_id
  • 0
    что вернет общую долю, лайки и комментарии? но где род
  • 0
    я также не вижу сообщений в таблице по этому запросу
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню