在mysql中需要一个分组选项

gmxoilav  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(269)

我有这样一个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)

我试着使用mysql的group\u concat()函数,但是我不能让结果看起来像这样。我只想做的是,mysql按顺序返回结果,但为新用户创建一个新组。创建一个新组添加带有逗号的id,然后在一个新的用户id上创建一个新组。
我知道我可以用php编程,但是如果我用php编程,我在分页上会有一些问题。
你知道怎么做吗?
现在谢谢你。
编辑:我也尝试过这样的查询:按用户id从故事组中选择组concat(idform)

+---------------------+--------------+
| 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)
i2byvkas

i2byvkas1#

您需要比较连续的用户id,并在比较之后为每个组分配一个编号。稍后,您可以使用groupconcat来处理数据 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;

相关问题