Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL GROUP_CONCAT作为多个字段和自定义顺序_Mysql_Sql_Group Concat - Fatal编程技术网

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

MySQL GROUP_CONCAT作为多个字段和自定义顺序,mysql,sql,group-concat,Mysql,Sql,Group Concat,以下是我的表格结构: 以下是我想要的查询结果(考虑到用户向我提供了2 | 4 | 1模式): 以下是我尝试过的: 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 = parcel

以下是我的表格结构:

以下是我想要的查询结果(考虑到用户向我提供了
2 | 4 | 1
模式):

以下是我尝试过的:

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;
结果是:


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

如果你也想要ID,你应该
GROUP\u CONCAT
track中的ID,它们也将以相同的顺序提供


或者在查询结束时设置ORDER BY,它也将处理该数据。

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

SELECT ParcelID, EventID, DateTime
FROM track
WHERE EventID IN(1, 2, 4)
将此查询的结果存储在地块ID到事件数组的映射中,其中键是地块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

注意:此答案是

的精简版,用户是否总是只需要查看3个事件?否,模式可能是3 | 2 | 5 | 4 | 1 | 7。更改了第二个模式示例,使其更加清晰。谢谢,呃。模式中是否有最大数量的项目?如果事件类型数量有限,为什么不一次汇总所有事件类型,然后选择用户需要的字段?@HolgerBrandt此模式在配置文件中定义,项目数量不受限制。我不需要EventID,但是我需要一行中根据EventId的日期和定制的订单模式(比如
4 | 2 | 1 | 5
datewhereeventid=4 | datewhereeventid=2 | datewhereeventid=1 | datewhereeventid=5