需要 mysql 中的分组选项
Need a grouping option in mysql
我有一个 Mysql table 这样的:
+--------+--------------+
| 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_CONCAT() 函数,但我无法使结果看起来像这样。我只想按顺序 MYSQL return 结果,但为新用户创建一个新组。创建一个新组用逗号添加 id,然后在新的 user_id 上创建一个新组。
我知道我可以使用 PHP 通过编程方式实现它,但是如果我使用 PHP 实现它,我在分页方面遇到了一些问题。
知道怎么做吗?
现在谢谢你。
编辑:
我也试过这样的查询: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)
您需要比较连续的用户 ID,并在比较后为每个组分配一个编号。稍后,您可以将 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;
我有一个 Mysql table 这样的:
+--------+--------------+
| 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_CONCAT() 函数,但我无法使结果看起来像这样。我只想按顺序 MYSQL return 结果,但为新用户创建一个新组。创建一个新组用逗号添加 id,然后在新的 user_id 上创建一个新组。
我知道我可以使用 PHP 通过编程方式实现它,但是如果我使用 PHP 实现它,我在分页方面遇到了一些问题。
知道怎么做吗?
现在谢谢你。
编辑: 我也试过这样的查询: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)
您需要比较连续的用户 ID,并在比较后为每个组分配一个编号。稍后,您可以将 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;