在相同的查询mysql中更新+订单

时间:2012-01-25 13:02:19

标签: mysql select sql-order-by limit

她是我的桌子结构:

表1:track_data

| device_id(foreign) | latitude | longitude | activity |

- 存储id,位置坐标,活动是插入它们的时刻。


表2:user_devices

| device_id(primary) | park_lat | park_long |

存储id,park_lat / park_long需要根据请求从track_data表中以纬​​度/经度存储(即最新的活动数据)。 现在,我将如何在一个查询中将最新的纬度/经度从Table1存储到Table2。这是可能的,要在同一查询中混合选择和更新吗?

现在我的无效直观查询:)

UPDATE user_devices,track_data
SET user_devices.park_lat = latitude,user_devices.park_long = longitude  
WHERE user_devices.id='33' AND track_data.activity=(SELECT activity FROM track_data 
ORDER BY track_data.activity DESC LIMIT 1)

1 个答案:

答案 0 :(得分:1)

update user_devices 
join (select device_id, latitude, longitude, activity
      from (select device_id, latitude, longitude, activity
          from track_data order by device_id, activity desc) x
      group by device_id) latest_lat_long on latest_lat_long.device_id = user_devices.device_id
set 
park_lat = latest_lat_long.latitude,
park_long = latest_lat_long.longitude;

这是如何运作的:

  • 最内层查询按device_id排序,然后是最新活动
  • 下一层只获取每个device_id的第一条记录(最新的,因为我们订购了它)
  • 然后我们将它加入到我们的表中,因此我们只需要一次通过track_data
  • 最后我们更新了列

这个查询会表现得非常好,因为它不会像某些人本能地那样对每行进行查询。