这已经极大地更新,因为我走近解决方案如何SQL SELECT一个一对多的关系和合并输出
我猜的标题是不是最好的,但我不知道该如何解释它更好。
我有坐标在两个相关表中的位置。表locations(id, name, description, created_at)
和locations_coordinates(location_id, lat, lng, coordinates_order)
。
我存储未知数量的坐标(多边形),这就是为什么我使用两个表。
现在我运行下面的查询
SELECT l.id,
l.name,
l.description,
l.created_at,
GROUP_CONCAT(Concat(c.lat, ":", c.lng) ORDER BY c.coordinate_order ASC
SEPARATOR
', ') AS coordinates
FROM locations l
LEFT JOIN locations_coordinates c
ON l.id = c.location_id
WHERE l.id = ' . $id . '
GROUP BY l.id,
l.name,
l.description,
l.created_at ASC
,所以我得到下面的输出(使用ID = 3):
[
{
"id":"3",
"name":"Stadthalle",
"description":"Die Wiener Stadthalle",
"created_at":"2012-01-07 14:22:06",
"coordinates":"48.201187:16.334213, 48.200665:16.331606, 48.202989:16.331091, 48.203075:16.334192"
}
]
什么,我想获得的是纬度和经度配对在一起,如:
[
{
"id":"3",
"name":"Stadthalle",
"description":"Die Wiener Stadthalle",
"created_at":"2012-01-07 14:22:06",
"coordinates":[
[
"48.201187,16.334213"
],
[
"48.200665,16.331606"
],
[
"48.202989,16.331091"
],
[
"48.203075,16.334192"
]
]
}
]
所以我的问题是:有没有办法只用SQL来获取所需的输出?如果没有,我的查询是否可以改进,这样我就可以更容易地使用应用程序代码来执行它(PHP适合我)?
UPDATE:使用的MyISAM并在 “locations_coordinates” 表中, “locations_id” 和 “coordinates_order”
我真的是PRIMARY和 “coordinates_order” 被设定为AUTO INCREMENT,因此插入时始终会启动一系列新的订单号。 (我需要这个,所以我可以在以后按正确的顺序选择坐标)。
我使用MyISAM,在“locations_coordinates”表中,“locations_id”和“coordinates_order”是PRIMARY,并且“coordinates_order”设置为AUTO INCREMENT,因此插入时总是会启动一系列新的订单号。 (我需要这个,所以我可以在以后按正确的顺序选择坐标)。我不确定你的意思是由user.id? – 2012-01-11 11:59:50