php - SQL : Merge two rows by some ID and keep values

标签 php mysql sql laravel

我面临一个相对简单的问题,但我无法设法解决问题。请记住,如果 PHP 可以使事情变得更容易,我将 PHP 与 Laravel 框架结合使用。

我有一个表格,里面填满了这样的数据:

ID | TRANSACTION_ID | BEACON_TYPE
---+----------------+---------------
 1 |       1        |  "abc"
 2 |       2        |  "def"
 3 |       2        |  "xyz"

我想按交易 ID 对它们进行分组,并将信标类型保留在数据中,如下所示:

ID | TRANSACTION_ID | BEACON_TYPE
---+----------------+---------------
 1 |       1        |  "abc"
 2 |       2        |  "def", "xyz"

我试过使用 group by 但无济于事。关于如何实现这一目标的任何想法或提示?正如我之前所说,可能有一些方法可以使用 Laravel Eloquent 来完成。

最佳答案

假设您正在使用 MySQL,您正在寻找的函数是 GROUP_CONCAT()。使用 Eloquent,它看起来像这样:

$transactions = DB::table('tableName')
                  ->select('TRANSACTION_ID', DB::raw('GROUP_CONCAT(BEACON_TYPE SEPARATOR ', ') as BEACON_TYPE'))
                  ->groupBy('TRANSACTION_ID')
                  ->get();

请注意,如果您想更改分隔符,只需将 ', ' 编辑为其他内容即可。默认分隔符是 ','

关于php - SQL : Merge two rows by some ID and keep values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57044839/

相关文章:

php将时间戳转换为特定格式

php - 当 Wilson 分数间隔相等时,MYSQL 使用 UploadDate 对下一行进行排序

mysql - sql/pl-Sql 查询中的 "` “符号(位于 tab 键顶部)是什么意思?

php - 在 PHP 中按时间戳字段排列多个 sql 查询的算法

mysql - SQL,获取连续多次发生的结果

php - 用多种变体替换字符串

mysql - 有人可以告诉我为什么这不起作用吗?请看截图

sql - PGAdmin 从哪里获取估计的行数?

sql - 使用 SQL Server 中的先前日期填充缺失的日期

php - 使用 Queue::fake() 测试监听器