• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

"verschachtelte" sql abfragen

F

FoXMorayn

Guest
Hallo,

ich gebe das ergebnis einer sql abfrage per while schleife aus.
in dieser while schleife möchte ich eine andere abfrage starten.


select * from abc

whlile(result)
{

hier möchte ich mit mit einer id aus abc mehere zeilen einer anderen tabelle ausgeben

}


kann ich das per sql in der 1. abfrage lösen und ein 2d array per sql erzeugen, oder benötige ich eine 2. datenbank verbindung? wie wird soetwas gelößt?

gruß,
foxmorayn
 
Werbung:
Ich bin sicher, dass du das nicht möchtest, da das deine Anwendung extrem verlangsamen würde und mysql genau dafür viele Möglichkeiten bietet. Du suchst eine Variante von join.

Es gibt bei selfhtml mehrere Artikel über das thema, vielleicht helfen dir diese weiter:
Einfhrung in Joins
Fortgeschrittene Jointechniken
 
hier mal eine ganz vereinfachte variante meines problems

tabelle user id|name
tabelle projekt id|projekt_name|user_id


pro user habe ich mehere projekte.

ich möchte so eine ausgabe:

user1
projekt1
projekt2
projekt3
projekt4
user2
projekt5
projekt6
projekt7


für die ausgabe benötige ich zwei schleifen:


while(tabelle user)
{
<div>
result['user'];
while(tabelle projekt) {<div>result2['projekt']</div>} //projekte mit der id von result['id'];
</div>
}

ich versteh nicht, wie mir ein join weiterhelfen könnte.
 
Werbung:
Ein JOIN hilft dabei schon, auch wenn du den Code dann nicht genau so, wie du ihn dir vorstellst, ausführen kannst.

PHP:
Int Last_User_Id = 0;
String sql = "select user.id u_id, user.name u_name, projekt.id p_id,projekt.projekt_name p_name from user left join projekt on projekt.user_id = user.id";
Result result = DB.query(sql);
while (Array row = result.fetch_row()) {
  if (Last_User_Id != row["u_id"]) {
     Last_User_Id = row["u_id"];
     print(row["u_name"]);
  }
  if (row["p_id"] != null) {
    print("projekt"+row["p_id"]);
  }
}
result.close();
 
so ganz steig ich da nicht hinter:

eine beispielausgabe liefert mir:

projekt1
user1
projekt2
user2
user3
user4

obwohl alle projekte zu einem user gehören.
wenn noch sortiert wird, ist die reihenfolge völlig durcheinander.

gehst du davon aus, dass die ausgabe wie folgt ist, projekt 1,2 zu user1 und projekt3 zu user3 gehört ?:


user1
projekt1
projekt2
user2
user3
projekt3
user4
 
Werbung:
danke für eure antworten!
die lösung mit den joints ist leider nicht so fexibel, ich werde erstmal eine zweite verbindung pro user einsetzten.

gruß,
foxmorayn
 
Natürlich ist diese flexilbel, aber vor allem sie ist viel schneller als das was du vorhast
 
Das, was ich dir gegeben habe vermindert drastisch die Anzahl Queries und sollte auch wenn möglich immer so gemacht werden, wie ich es dir gezeigt habe.
 
Werbung:
im aktutem fall ist die performanz ausreichend. wenn ich etwas mehr zeit habe, werd ich mich damit nochmal genauer beschäftigen. ich habe den verdacht, dass ich so keine kontrolle über datenbank-seitige sortierfunktionen hab. die lesbarkeit vom code kommt auch noch hinzu.
 
Natürlich kannst du so sortieren und hast volle Kontrolle, ausserdem wird der Code deutlich lesbarer, da du nur eine einzige Abfrage brauchst.
 
Werbung:
Zurück
Oben