Как я могу извлечь все строки групп?

0

Вот мой стол:

// notifications
+----+--------+-----------+---------+--------------------+
| id | money  | post_id   | user_id | belongs_to_user_id |
+----+--------+-----------+---------+--------------------+
| 1  | 5      | 1         | 123     | 101                |
| 2  | 10     | 2         | 123     | 101                |
| 3  | -2     | 4         | 456     | 101                |
| 5  | -2     | 2         | 456     | 101                |
| 6  | -2     | 3         | 123     | 101                |
| 7  | 5      | 4         | 789     | 101                |
| 8  | 10     | 4         | 789     | 101                |
+----+--------+-----------+---------+--------------------+

И я выбираю набор сгруппированных строк, используя этот запрос: (последние три группы) *

SELECT * FROM notifications
WHERE belongs_to_user_id = 101
GROUP BY post_id, user_id
ORDER BY id DESC
LIMIT 3

Вот текущий результат:

+----+--------+-----------+---------+--------------------+
| 5  | -2     | 2         | 456     | 101                |
| 6  | -2     | 3         | 123     | 101                |
| 7  | 5      | 4         | 789     | 101                | -- the eighth row is grouped with this
+----+--------+-----------+---------+--------------------+

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

+----+--------+-----------+---------+--------------------+
| 5  | -2     | 2         | 456     | 101                |
| 6  | -2     | 3         | 123     | 101                |
| 7  | 5      | 4         | 789     | 101                |
| 8  | 10     | 4         | 789     | 101                |
+----+--------+-----------+---------+--------------------+

Как я могу это сделать?

  • 3
    Есть подзапрос, чтобы вернуть последние 3 user_ids. Присоединяйтесь с этим результатом.
  • 0
    @jarlh Основано ли ваше решение на столбце user_id ? Не правильно звучит.
Показать ещё 11 комментариев
Теги:

1 ответ

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

Я считаю, вы хотите этого:

SELECT n.*
FROM notifications n JOIN
     (SELECT n2.post_id, n2.user_id
      FROM notifications n2
      WHERE n2.belongs_to_user_id = 101
      ORDER BY n2.id DESC
      LIMIT 3
     ) nn
     ON nn.post_id = n.post_id AND nn.user_id = n.user_id
ORDER BY id DESC;

В вашей проблеме нет предложения GROUP BY. Вы, похоже, смущены терминологией SQL.

Ещё вопросы

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