Servus,
aktuell programmiere ich eine Umkreissuche im Rahmen eines Wordpress-Plugins.
Als Datenbestand nutze ich eine selbst generierte Tabelle auf Basis der OpenGeoDB. Diese befindet sich in der verwendeten Wordpress-Datenbank.
Vorab: die Entwicklungsversion (nutzt NICHT die Wordpress-API) funktioniert fehlerfrei und liefert die benötigten Datensätze einwandfrei zurück.
Im Plugin selbst ist eine eigene Funktion deklariert. Als Return-Wert sollen Datensatz-ID's geliefert werden.
Nachdem ich nun diverse Quellen "durch" habe (Stackoverflow & Co.), probiere ich es hier mal.
1. Über $wpdb->get_row() hole ich mir die notwendige ID (intern, GeoDB) der gesuchten PLZ.
2. Folgende SQL-Anweisung führt die Berechnung durch (Radius um Start-PLZ) und soll die entsprechenden Postleitzahlen im Umkreis liefern:
$usql = "SELECT *,
ACOS(
SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat))
+ COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
* COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
) * 6380 AS distance
FROM ras_geo dest
CROSS JOIN ras_geo src
WHERE src.zc_id = ".$sid."
AND dest.zc_id <> src.zc_id
HAVING distance < 20
ORDER BY distance";
Alles anzeigen
Die Variable $sid wird im Schritt 1 gesetzt. Funktioniert.
Problem:
Jegliche Versuche, via Query (egal welche Variante, $wpdb->get_results()) ein verarbeitbares Ergebnis zu bekommen, scheitern. Exakt das gleiche SQL-Statement wird im regulären mysql_query() sauber verarbeitet.
Hintergrund:
Durch den CROSS JOIN entstehen redundante Spaltennamen im Resultset. Aus dem Grund lasse ich mit $wpdb->get_results($usql, ARRAY_N) ein numerisches Resultset erstellen.
Eine Überprüfung mit var_dump() ergab, dass in allen Keys die gleichen Werte stehen. WTF?
Meine Frage richtet sich an die Datenbankmenschen, welche die $wpdb-Klasse geblickt haben: Wo liegt das Problem?
Zwar könnte ich die API links liegen lassen, da ich aber im weiteren Verlauf des Projektes die Umkreissuche als eigenständiges Plugin weiterentwickeln möchte, mag ich sie auch nutzen.
Wo ist mein Denk-/Verständnisfehler?
Any input appreciated!
Gruß