首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL GROUP_CONCAT作为多个字段和自定义顺序

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

Stack Overflow用户
提问于 2012-07-24 22:28:40
回答 2查看 834关注 0票数 2

下面是我的表格的结构:

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

这是我尝试过的:

代码语言:javascript
复制
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()来将数据划分为几个字段(date where track.eventID = 3date where track.eventID = 1date where track.eventID = 5date where track.eventID = 7 #,假设模式为3|1|5|7)。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-25 01:15:47

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

代码语言:javascript
复制
SELECT ParcelID, EventID, DateTime
FROM track
WHERE EventID IN(1, 2, 4)

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

代码语言:javascript
复制
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的每个事件的日期。

代码语言:javascript
复制
SELECT parcel.ID, parcel.TrackCode, parceltype.Name
FROM parcel
JOIN parceltype ON parceltype.ID = parcel.ParcelTypeID

注意:此答案是的修剪版本

票数 1
EN

Stack Overflow用户

发布于 2012-07-24 23:20:55

如果你想要的in也,你应该GROUP_CONCAT的in从轨道,他们将以相同的顺序。

或者在查询的末尾设置ORDER BY,它也会操作该数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11633061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档