Нужна опция группировки в MySQL

0

У меня есть таблица Mysql:

+--------+--------------+
| idform | user_id      |
+--------+--------------+
| 17     |            2 |
| 16     |            2 |
| 15     |            2 |
| 14     |            2 |
| 13     |           18 |
| 12     |           18 |
| 11     |           18 |
| 10     |           18 |
| 9      |           18 |
| 8      |            1 |
| 6      |            2 |
| 5      |            2 |
| 3      |            2 |
| 1      |            2 |
+--------+--------------+
14 rows in set (0.00 sec)

Мне нужен запрос, который дает мне такой результат:

+----------------+--------------+
| idform         | user_id      |
+----------------+--------------+
| 17,16,15,14    |            2 |
| 13,12,11,10,9  |           18 |
| 8              |            1 |
| 6,5,3,1        |            2 |
+----------------+--------------+
4 rows in set (0.00 sec)

Я попытался использовать функцию GROUP_CONCAT() MYSQL, но я не мог заставить результат выглядеть так. Все, что я хочу сделать, - MYSQL возвращает результаты по порядку, но создает новую группу для нового пользователя. Создайте новую группу, добавьте идентификаторы с запятой, затем в новый user_id создайте новую группу.

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

есть идеи как это сделать?

Благодарю вас.

EDIT: Я также попробовал запрос следующим образом: SELECT GROUP_CONCAT (idform) FROM story GROUP_BY user_id. Но он дает результат следующим образом:

+---------------------+--------------+
| idform              | user_id      |
+---------------------+--------------+
| 8                   |            1 |
| 1,3,5,6,14,15,16,17 |            2 |
| 9,10,11,12,13       |           18 |
+---------------------+--------------+
3 rows in set (0.00 sec)
  • 0
    SELECT group_concat(idform) FROM your_table group_by user_id
  • 0
    Спасибо за ответ, но он дает результат, сгруппированный по user_id. Это не то, что я хочу.
Показать ещё 1 комментарий
Теги:
group-concat

1 ответ

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

Вам нужно сравнить последовательный идентификатор пользователя и после сравнения назначить каждой группе номер. Позже вы можете использовать group_concat над данными с этим group_number.

Я думаю, что ниже запрос должен работать для вас.

SELECT GROUP_CONCAT(idform)
FROM (
    SELECT
    story.*
    , @groupNumber := IF(@prev_userID != user_id, @groupNumber + 1, @groupNumber) AS gn
    , @prev_userID := user_id
    FROM story
  , (SELECT @groupNumber := 0, @prev_userID := NULL) subquery
) sq
GROUP BY gn;

Ещё вопросы

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