Dies wurde drastisch aktualisiert, seit ich der Lösung näher gekommen bin
Ich glaube, der Titel ist nicht der beste, aber ich wusste nicht, wie ich es besser erklären sollte.
Ich habe Orte mit Koordinaten in zwei Bezugstabellen. Tabelle locations(id, name, description, created_at)
y locations_coordinates(location_id, lat, lng, coordinates_order)
.
Ich speichere eine unbekannte Anzahl von Koordinaten (ein Polygon), weshalb ich zwei Tabellen verwende.
Jetzt führe ich die folgende Abfrage aus
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
Ich erhalte also folgende Ausgabe (mit 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"
}
]
Ich möchte die Breiten- und Längengradpaare zusammen erhalten, etwa so:
[
{
"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"
]
]
}
]
Meine Frage lautet also: Gibt es eine Möglichkeit, die benötigte Ausgabe nur mit SQL zu erhalten? Wenn nicht, kann meine Abfrage verbessert werden, so dass ich es einfacher habe, es mit Anwendungscode zu tun (PHP für mich)?
UPDATE:
Ich benutze MyISAM und in der Tabelle "locations_coordinates" sind "locations_id" und "coordinates_order" PRIMÄRES und "coordinates_order" ist eingestellt auf AUTOMATISCHE ERHÖHUNG so dass beim Einfügen immer eine neue Reihe von Ordnungsnummern beginnt. (Ich brauche das, damit ich später die Koordinaten in der richtigen Reihenfolge auswählen kann).