Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сумма числа полей из нескольких таблиц без дублирования / 5 сообщений из 5, страница 1 из 1
28.03.2014, 18:55:39
    #38599547
topcyprus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма числа полей из нескольких таблиц без дублирования
Привет, господа!

Есть таблица users: id, name

есть 3 таблицы:
comments: id, user_id, comment
shares: id, user_id, share
likes: id, user_id, like

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT users.name, COUNT(comments.id), COUNT(shares.id), COUNT(likes.id), COUNT(cms_comments.id) + COUNT(shares.id) + COUNT(likes.id) AS total
FROM users

LEFT JOIN comments ON comments.user_id=users.id
LEFT JOIN shares ON shares.user_id=users.id
LEFT JOIN likes ON likes.user_id=users.id

GROUP BY users.name
ORDER BY total DESC
LIMIT 10



Однако тут дублируются строки при соединении таблиц и все суммы увеличиваются многократно. Я не могу придумать как сделать такой запрос без разбивания на подзапросы. Буду благодарен за советы.
...
Рейтинг: 0 / 0
28.03.2014, 19:53:01
    #38599573
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма числа полей из нескольких таблиц без дублирования
topcyprusЯ не могу придумать как сделать такой запрос без разбивания на подзапросы. Буду благодарен за советы.
без подзапросов никак, либо они будут в секции джойна, либо в секции селекта
...
Рейтинг: 0 / 0
28.03.2014, 19:56:20
    #38599577
topcyprus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма числа полей из нескольких таблиц без дублирования
artas,

а можете наиболее оптимальный путь подсказать?
...
Рейтинг: 0 / 0
28.03.2014, 19:57:12
    #38599579
сумма числа полей из нескольких таблиц без дублирования
topcyprus,

ну, если ID во всех таблицах - это действительно ID (то есть уникальный идентификатор), то можно агрегаты считать с модификатором DISTINCT. Но оптимальнее всё же будет сделать предварительную агрегацию каждой таблицы во вложенном подзапросе, а после всё заджойнить в единое целое
...
Рейтинг: 0 / 0
28.03.2014, 20:02:00
    #38599580
topcyprus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма числа полей из нескольких таблиц без дублирования
Добрый Э - Эх,

ок, спасибо.

Я смог сделать через тройной UNION и сумму результатов.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сумма числа полей из нескольких таблиц без дублирования / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]