Mysql在一个字段中查询组数据

时间:2015-05-15 04:20:02

标签: mysql

我有一张这样的表

CREATE TABLE `users_customers`(
    `user_id` VARCHAR(50) NOT NULL,
    `customer_id` VARCHAR(15) NOT NULL,
    PRIMARY KEY(`user_id`, `customer_id`),
    INDEX user_id_index (`user_id`),
    INDEX customer_index (`customer_id`),
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE CASCADE
);

使用数据

users_customers
user_id       customer_id
--------------------------
1             1
2             1
1             2
1             3
2             3
...

我想从这个表中查询并生成这样的结果

user_id        customers
-------------------------
1              1,2,3
2              1,3
...

我看过concat()函数,但仍然不知道如何反映我的想法。

2 个答案:

答案 0 :(得分:1)

使用 GROUP_CONCAT

SELECT user_id,GROUP_CONCAT(customer_id)
FROM users_customers
GROUP BY user_id

<强> Fiddle

答案 1 :(得分:1)

您使用GROUP_CONCAT函数执行此操作。它将对值进行分组并将其作为字符串返回。

所以你的查询就像

SELECT user_id, GROUP_CONCAT(customers)
  FROM users_customers GROUP BY user_id

如果您希望按特定顺序排列值,则可以将ORDER BY添加到GROUP_CONCAT,或者如果您想要一个不同于逗号的分隔符,则可以添加SEPARATOR定义。< / p>

如果该字段可能包含重复值而您只需要一次,则还可以使用DISTINCT添加该列。

SELECT user_id, GROUP_CONCAT(DISTINCT customers ORDER BY customers DESC SEPARATOR ';')
  FROM users_customers GROUP BY user_id