Archivlink: javarea.de Forum > PHP, MySQL & CGI > LEFT JOIN's und RIGHT JOIN's
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > LEFT JOIN's und RIGHT JOIN's

Pages: [1]

geschrieben von Martin am 20.05.2007 - 14:09
Ave zusammen,

Ich habe folgende Mysql Abfrage:

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 

<?
$link 
$mysql->query("SELECT planets.*,
                                      planet_prototyps.*,
                                      moons.*,
                                      moon_prototyps.*,
                                      colonies.*,
                                      users.*
                                      FROM planets
                                      LEFT JOIN planet_prototyps
                                      ON planets.planet_prototyp_id = planet_prototyps.planet_p_id
                                      LEFT JOIN moons
                                      ON moons.moon_planet_id = planets.planet_id
                                      LEFT JOIN moon_prototyps
                                      ON moons.moon_prototyp_id = moon_prototyps.moon_p_id
                                      LEFT JOIN colonies
                                      ON colonies.colonie_planet_id = planets.planet_id
                                      LEFT JOIN users
                                      ON colonies.colonie_user_id = users.user_id
                                      WHERE planets.planet_system_id ='"
.$home_system["system_id"]."'
                                      GROUP BY planets.planet_id
                                      ORDER BY planets.planet_count"
) or die($mysql->error());
?>



Es wird ein Planeten-System - system_id in WHERE - Klausel - abgefragt. Liefern soll die mysql alle Sonnen, Planeten, Monde, Kolonien und Benutzer und das in einem Array, welches ich mir wie folgt vorstelle:

Die Abhängigkeiten der einzelnen Gruppen soll sich in einem multidimensionalen Arrays ergeben.

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
Array['system'] {
                     Array['planet1']  {
                                           Array['moon1']  {
                                           }              
                                           Array['colonie1']  {
                                           }
                       ...          
                      }
                     Array['planet2']  {
                                           Array['moon1']  {
                                           }              
                                           Array['moon2']  {
                                           }              
                                           Array['colonie1']  {
                                                   Array['user']  {
                                                   }
                                           }
                       ...          
                      }
}


So wie die Abfrage jetzt geschrieben ist, liefert mysql ein eindimensionales Array in welchem alles steht und teilweise Werte überschrieben werden.

mfg martin

geschrieben von Klaush am 21.05.2007 - 11:54
Das Array würde ich bereits mit der SORT ORDER aufbauen und dann in der Schleife füllen.

probier das mal:

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 

<?
$link 
$mysql->query("SELECT planets.*,
                                      planet_prototyps.*,
                                      moons.*,
                                      moon_prototyps.*,
                                      colonies.*,
                                      users.*
                                      FROM planets
                                      LEFT JOIN planet_prototyps
                                      ON planets.planet_prototyp_id = planet_prototyps.planet_p_id
                                      LEFT JOIN moons
                                      ON moons.moon_planet_id = planets.planet_id
                                      LEFT JOIN moon_prototyps
                                      ON moons.moon_prototyp_id = moon_prototyps.moon_p_id
                                      LEFT JOIN colonies
                                      ON colonies.colonie_planet_id = planets.planet_id
                                      LEFT JOIN users
                                      ON colonies.colonie_user_id = users.user_id
                                      WHERE planets.planet_system_id ='"
.$home_system["system_id"]."'                                      
                                      ORDER BY planets.planet, planets.moon, planets.colonie, planets.user"
) or die($mysql->error());

while (
$row $mysql->fetch_array($link))
$arraycache[$row['system']][$row['planet']][$row['moon']][$row['colonie']][$row['user']] = $row;
?>



Ps.: die in der ORDER Klausel angegebenen Feldnamen sind von mir frei erfunden, bitte abgleichen.

geschrieben von Martin am 21.05.2007 - 20:13
Danke Klaus, werds gleich mal ausprobieren.


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.