我有一张这样的 table
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() 函数,但仍然不知道如何反射(reflect)我想要的内容。
最佳答案
您使用GROUP_CONCAT函数来执行此操作。它将对值进行分组并将它们作为字符串返回。
所以你的查询会是这样的
SELECT user_id, GROUP_CONCAT(customers)
FROM users_customers GROUP BY user_id
如果您希望值按特定顺序排列,您可以将 ORDER BY
添加到 GROUP_CONCAT
中,或者如果您想要使用不同于逗号的分隔符,您可以添加 SEPARATOR
定义。
如果字段可能包含重复值并且您只需要一次,您还可以在列前面添加 DISTINCT
。
SELECT user_id, GROUP_CONCAT(DISTINCT customers ORDER BY customers DESC SEPARATOR ';')
FROM users_customers GROUP BY user_id
关于Mysql查询某个字段中的组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30251460/