Mysql查询某个字段中的组数据

标签 mysql

我有一张这样的 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/

相关文章:

PHP & Mysql 从大数据中选择

MYSQL:如何将字符串转换成月份(数字)

MySQL,获取多行集合中一行的位置

c# - 如何使用 session 用户计算购物车

MySQL 乘法输出和 Perl DBI

php - 使用 JavaScript(或 AJAX?)动态添加 PHP/MySQL 代码

mysql - SQL - 计数不返回零

当按下下一个按钮时,PHP 分页不会改变

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 如何检查我的 mysql 数据库中当前正在运行的查询?