多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示

先说明我遇到的问题如图("mqtt_disconnect"是设备断开连接上传数据,数据点比较多。"dev_online"是重新连接没有对应多个数据点。从途中看到是一个list集合或者数组,因为“【】”):


多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示_第1张图片

下面说一下解决方案:

刚刚开始我的思维逻辑是做个循环一点一点查询数据库,放到集合中,当我真正实现这个功能,我很郁闷,查询数据比较缓慢,不是一般的慢,一个循环要做5-6次数据库,简直让我无法容忍,还特别占内存如图:

1.慢速解决方案一点一点查询放到集合里面:

多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示_第2张图片
这是比较笨的办法而且不实用

2.快速解决方案先从数据库说起,就是一次性从数据库全部查询出来如图:

多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示_第3张图片
这是根据一个值查询3张表

select*from zencloud_objects o

left join zencloud_payload py on o.payloadId=py.id

left join zencloud_heartbeat h on py.heartbeatId=h.id

where o.product_key=#{product_key}

这里可能会问返回什么情况?怎么处理?(如图)

多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示_第4张图片
返回map集合

如图1所示 :是返回接收是一个以字段为key,字段值为value的map集合

如图2所示:遍历这个集合相当于,你获取到的就是List之中一横段数据(如下图),你遍历之后相当于取这个每个字段名的key,去找对应的value,放到集合当中。这里相当于查询数据库就一次,速度很快比较适用。

3.如何按timestamp时间顺序显示呢?

如图:

多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示_第5张图片
对应字段加上就ok拉

这里就表示按字段时间顺序查询,当然可以按数字顺序类似的。

你可能感兴趣的:(多表联查,并且返回一个树形结构关系的List集合并且按时间顺序显示)