Это было существенно обновлено, так как я приблизился к решению
Я думаю, что название не самое лучшее, но я не знал, как это объяснить лучше.
У меня есть местоположения с координатами в двух связанных таблицах.Таблица 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)?
ОБНОВЛЕНИЕ:
Я использую MyISAM и в таблице "location_coordinates" значения "location_id" и "arguments_order" равны PRIMARY , а для "arguments_order" установлено значение AUTO INCREMENT , поэтому он всегда начинаетсяновая серия номеров заказов при вставке.(Мне нужно это, чтобы я мог выбрать координаты в правильном порядке позже.)