我有一个系统可以实时跟踪数千个对象并将它们的位置存储在数据库表中。我不是每隔几秒钟就存储他们的位置,而是在它发生变化时存储他们的位置、方向、速度和时间。对于我正在跟踪的对象数量,这使表格相对较小。
每一行都包含单个对象的数据,虽然这些数据应该按时间顺序进入数据库,但我想确保在将它们连接在一起之前按时间顺序提取数据,以便我可以绘制数据.
我的表结构是:
CREATE TABLE tracks (
id int(11) auto_increment,
objectId int(11) default 0,
posTime bigint(15) default 0,
X float(6,4) default 0.0000,
Y float(6,4) default 0.0000
Z int(11) default 0,
hdg float(4,1) default 0.0,
spd float(5,1) default 0,
PRIMARY KEY(id));
通过使用此查询:
SELECT objectId,
group_concat(X, ',', Y, ',', hdg, ',', spd separator ',') as trail
FROM tracks
WHERE objectId > 0
group by objectId;
我以我想要的格式获得我想要的数据,例如:
14979491 | -26.3286,-48.4679,206.0,362.0,-26.3684,-48.4892,205.0,357.0
即 ObjectId | X1,Y1,航向1,速度1,X2,Y2,航向2,速度2,....等
但是,我不是 100% 确信位置报告的时间顺序正确。
如何在将它们连接在一起之前通过增加 posTime 对每个 id 的位置报告进行排序?从理论上讲,这只是添加 ORDER BY posTime ASC 的一种情况,但我不确定如何或在何处将其添加到我的查询中,因为之前的所有尝试都失败了......
编辑澄清:我知道 group_concat 支持 ORDER BY 子句,但我不希望在结果中返回我排序的列 (posTime)。
您需要对
GROUP_CONCAT
嵌入式ORDER BY
充满信心。唯一的方法是以下
建议 01:正确的索引
这将帮助查询优化器检索您正确排序的数据。
SUGGESTION 02:将 posTime 显示为调试步骤
如果
posTime
按需要订购,那么您应该可以