MySQL GROUP_CONCAT 作为多个字段和自定义顺序

标签 mysql sql group-concat

这是我的表格结构: Tables structure

这是我想要的查询结果(考虑到用户向我提供了 2|4|1 模式): Result of a query

这是我尝试过的:

SELECT parcel.TrackCode, parcelType.Name, GROUP_CONCAT(track.DateTime SEPARATOR '|') AS dt
FROM track
JOIN parcel ON track.ParcelID = parcel.ID
JOIN parcelType ON parcel.ParcelTypeID = parcelType.ID
JOIN event ON track.EventID = event.ID
GROUP BY parcel.ID;

结果是:

Result

所以问题是我需要 GROUP_CONCAT() 将数据分成几个字段(date where track.eventID = 3, date where track.eventID = 1, date where track.eventID = 5, date where track.eventID = 7 # 考虑到模式是 3|1|5|7) .有什么想法吗?

最佳答案

我建议运行两个查询。首先这个,获取相关事件:

SELECT ParcelID, EventID, DateTime
FROM track
WHERE EventID IN(1, 2, 4)

将此查询的结果存储在地 block ID 到事件数组的映射中,其中键是地 block ID,值是另一个数组。在该内部数组中,键是事件 ID,值是事件日期。

array(1 => array(
        2 => '2012-05-15 15:33:00', 
        4 => '2012-05-22 11:35:41', 
        1 => '2012-05-04 18:58:30'
    ),
    2 => array(
        2 => '2012-07-01 09:05:56', 
        4 => '2012-07-14 13:32:00', 
        1 => '2012-06-27 12:44:32'
    )
);

然后,使用下一个这样的查询来获取包裹列表,对于每个包裹,您可以轻松地在内存中查看上一个查询的结果,以找出每个事件的日期,对于任何给定包裹 ID。

SELECT parcel.ID, parcel.TrackCode, parceltype.Name
FROM parcel
JOIN parceltype ON parceltype.ID = parcel.ParcelTypeID

注意:此答案是 conversation that took place in the MySQL chat room 的精简版

关于MySQL GROUP_CONCAT 作为多个字段和自定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633061/

相关文章:

php无法恢复备份sql

php - 无法使用wamp修改数据库中的数据

mysql - 删除具有重复meta_values的重复帖子

sql - 我们可以在 PostgreSQL 中定义一个 GROUP_CONCAT 函数吗?

mysql - MySQL 中是否有 "number"数据类型?

javascript - 表单提交数据到数据库和url

mysql - 用 2 个表中的 2 列划分两个 select 语句,MySQL

sql - 如何在 SQL Server 和 Oracle SQL 中基于固定字符选择直到第 N 个空格的子字符串

php - 使用 2 GROUP_CONCAT 安全吗?

php - 如何在 HH :MM:SS format 中获得具有精确值的时间字段的正确 sum()