按字段内容进行分组的查询

Posted

技术标签:

【中文标题】按字段内容进行分组的查询【英文标题】:Query to group by the contents of the field 【发布时间】:2020-12-01 04:46:30 【问题描述】:

我需要帮助才能按字段内容进行分组。我有以下数据库:

+----+--------------+-----------------+------------------------------+
| id | depart_kode  |    depart_task  |            value             |
+----+--------------+-----------------+------------------------------+
| 1  |     001      |  Create Profil  |  Some Value                  |
| 2  |     001.12   |  Create Profil  |  Some Value                  |
| 3  |     001.452  |  Create Profil  |  Some Value                  |
| 4  |     002.914  |  Create Profil  |  Some Value                  |
| 5  |     002      |  Create Profil  |  Some Value                  |  
| 6  |     003      |  Create Profil  |  Some Value                  |
+----+--------------+-----------------+------------------------------+

我需要进行查询,在哪里我按 depart_kode 分组,我应该像这样以 json 格式打印前 3 位数字

  "001":[
    
    "depart_kode":"001,
    and other 
    ,
    
   "depart_kode":"001.12"
    ,
    ],
    "002":[
    
     "depart_kode":"002"
    
]

类似的东西,最重要的是,它们将根据前 3 个数字(如 001)分组到一个数组中。 而 json 只是一个例子,我想根据前 3 位数字将其拆分为一个数组

【问题讨论】:

您是在问如何将数据库表转换为 JSON 结构? 您可以使用 substring 函数按字段的一部分进行分组。 @NevilleKuyt 不,这只是一个例子,我想根据前 3 位数字将其拆分为一个数组 【参考方案1】:

这样的?

$departs = [];
foreach ($sqlRows as $row) 
    $departKey = substr($row['depart_kode'], 0, 3);
    
    if (!array_key_exists($departKey, $departs)) 
        $departs[$departKey] = [];
    
    
    $departs[$departKey][] = $row['depart_kode'];

工作example。

参考

substr - 获取字符串的特定部分(在我们的示例中为前 3 个字符) array_key_exists - 检查数组中的键是否存在

【讨论】:

以上是关于按字段内容进行分组的查询的主要内容,如果未能解决你的问题,请参考以下文章

优化按联接表中的字段对结果进行分组的查询

SQL如何查询一张表的所有字段并按其中一个字段进行分组

Django 查询 - 是不是可以在数据库级别按公共字段对元素进行分组?

如何在 Oracle SQL 上进行查询以获取时间间隔,按特定字段分组

SQL如何根据一个字段的某个关键词的前面部分分组查询

thinkphp 如何得到一个按字段内容分组的array