Hallo,
habe folgende Problematik und hoffe mal das ihr mir da ein wenig helfen könnt ;-)
Okay, ich habe eine MySQL Tabelle, welche Koordinaten einer Karte beinhaltet und folgendermaßen aufgebaut ist:
1. id -> PRIMARY KEY
2. pos_x -> pos_x + pos_y = UNIQUE KEY
3. pos_y
4. username -> INDEX
5. ...
(Die nachfolgenden Spalten sind für die Problematik unwichtig.)
So, anhand dieser Tabelle kann ich nun eine Karte erstellen, welche in Felder x/y unterteilt sind... in der Tabelle sind nur die belegten Felder hinterlegt...
Also bspw.
id pos_x pos_y username
-----------------------
01 1000 1000 1
02 1005 1008 1
03 1009 1025 2
04 ...
Da nicht alle Felder belegt sind, kann ich mit Hilfe des A-Stern Algorithmus den kürzesten Weg von A nach B berechnen lassen. Dieser Algorithmus gibt dann den Pfad in einem zweidimensionalen Array $pfad['pos_x']['pos_y'] zurück... verlangt aber zur Berechnung des Weges auch ein zweidimensionales Array...
Zur Zeit setze ich dieses Array folgendermaßen: (Ich möchte diese Vorgehensweise gern verbessern, da diese bei 10000 Feldern und mehr, allein schon für das Erstellen des Arrays eine hohe Zeit benötigt.)
-----------------------------------------------------------
$field = array();
$strSQL = "SELECT pos_x, pos_y FROM field;";
$db->query($strSQL);
while ($row = $db->getResult()) {
$field[$row['pos_x']][$row['pos_y']] = true;
}
-----------------------------------------------------------
Die Tabelle wird komplett ausgelesen und in einer Schleife zeilenweise komplett durchlaufen... die Werte pos_x und pos_y werden im Array $field als true (besetztes Feld) gesetzt.
Meine Frage ist nun, ob es dafür eine einfachere und schnellere Variante gibt, da diese bei 10000 Feldern und mehr, allein schon mehrere Sekunden benötigt...
Vielen Dank schonmal im Voraus.
Grüße