Подсчет действий пользователя с использованием двух разных таблиц MySQL - PullRequest
0 голосов
/ 06 марта 2020

У меня есть две таблицы; users и texts.

users хранит информацию о пользователе, такую ​​как имя пользователя, пароль и т. Д. c.

texts содержит некоторые тексты и некоторые дополнительные столбцы, такие как добавлено, обновлено, удалено, поэтому, когда пользователь выполняет указанное c действие, его имя пользователя записывается в записи текста в соответствующем столбце (если я обновляю текст, мое имя пользователя записывается в столбце updated_from).

I Я хочу посчитать все действия пользователя в соответствии со столбцами добавлено, обновлено, удалено, и результат должен быть примерно таким:

Username | Added | Updated | Deleted
 ========|=======|=========|======
  user_1 |     1 |       9 |       0
  user_2 |     5 |       9 |       2

Я пытаюсь использовать запрос

SELECT t.added_from,
COUNT(t.added_from) AS Added,
COUNT(t.updated_from) AS Updated
FROM users u, texts t
WHERE u.username = t.added_from
GROUP BY u.username ORDER BY u.id ASC

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

1 Ответ

0 голосов
/ 06 марта 2020

Я думаю, что вы хотите условную агрегацию. Логика c должна выглядеть так:

select
    u.username,
    sum(u.username = t.added_from)   added,
    sum(u.username = t.updated_from) updated,
    sum(u.username = t.deleted_from) deleted
from users u
inner join texts t 
    on u.username in (t.added_from, t.updated_from, t.deleted_from)
group by u.username
...