Hallo, ich habe eine MySQL abfrage das über 2 Tabelen läuft. Das Problem will ich nach dem Beispiel erstmal erleutern. Bzw. ob man irgend wie besser machen kann.
Tabelle: Tab_User
Felder: user_id, user_name, user_email, user_icq
Tabelle2: Tab_koppeln
Felder: user_id1, user_id2
SQL Abfrage:
SELECT user_id1, user_id2,
(SELECT user_icq FROM Tab_User WHERE user_id = user_id1) AS icq1,
(SELECT user_icq FROM Tab_User WHERE user_id = user_id2) AS icq2,
(SELECT user_name FROM Tab_User WHERE user_id = user_id1) AS name1,
(SELECT user_name FROM Tab_User WHERE user_id = user_id2) AS name1
FROM Tab_koppeln;
PROBLEM:
Die obige abfrage solte so gut wie funktionieren, aber wen ich vom user 1 und vom user 2 noch mehr Felder benötige, muß ich extrem viel diese verschachtelte (SELECT ...) anweisungen reinbringen.
IChbin natürlich nicht schreibfaul und kann dies ja auch machen, aber ich denke für MySQL ist es eher viel mehr arbeit, weil muß bei jeder (SELECT...) immer wieder den user finden um eine zeile auszulesen.
Geht es nicht irgend wie einfacher, das man irgend wie sagt, hol aus user 1 die und die Felder und vom User 2 holl die und die Felder. Also damit mysql nicht ständig den user auffinden muß um wieder ein doofes Feld auszulesen.
MySQL Abfrage vereinfachen (verschachtelung), wer kann helfe
- Mafia GmbH
- Mitglied
- Beiträge: 355
- Registriert: 13.10.2003 16:09
- Mafia GmbH
- Mitglied
- Beiträge: 355
- Registriert: 13.10.2003 16:09
Ja das war nur ein Beispiel, tatsechlich brauche ich so eine Abfrage für einen Forum Abfrage.
Das heißt in einer Tabelle wird ein Thema aufgemacht und es werden auch Antworten dort mit aufgenohmen.
So jetzt will ich aber so abfragen das ich den Titel der Thema des ersten Post abfrage und gleichzeitig den User des Letzten Post abfragen muß.
Und das sind eben 2 Einträge in der Tabelle.
Also so änlich wie ich das mit dem Beispiel gebracht habe.
Also kann man die Abfrage irgend wie vereinfachen? weil so wie die ist funktioniert zwar, aber kann ich statt immer nur ein Feld durch (SELECT ...) abrufen, sondern gleich mehrere Felder?
Das heißt in einer Tabelle wird ein Thema aufgemacht und es werden auch Antworten dort mit aufgenohmen.
So jetzt will ich aber so abfragen das ich den Titel der Thema des ersten Post abfrage und gleichzeitig den User des Letzten Post abfragen muß.
Und das sind eben 2 Einträge in der Tabelle.
Also so änlich wie ich das mit dem Beispiel gebracht habe.
Also kann man die Abfrage irgend wie vereinfachen? weil so wie die ist funktioniert zwar, aber kann ich statt immer nur ein Feld durch (SELECT ...) abrufen, sondern gleich mehrere Felder?
Hier ein Beispiel, wie man Name+ICQ+E-Mail sowohl von Sender und Empfänger einer PN ermittelt:
Code: Alles auswählen
SELECT u1.username AS u1_name, u1.user_icq AS u1_icq, u1.user_email AS u1_email,
u2.username AS u2_name, u2.user_icq AS u2_icq, u2.user_email AS u2_email
FROM phpbb_privmsgs p
LEFT JOIN phpbb_users u1 ON (u1.user_id = p.privmsgs_from)
LEFT JOIN phpbb_users u2 ON (u2.user_id = p.privmsgs_to)
WHERE p.privmsgs_id = ?
KB:knigge
- Mafia GmbH
- Mitglied
- Beiträge: 355
- Registriert: 13.10.2003 16:09
vielen Dank, werde gleich ausprobieren.
Nun ist natürlich die Frage gestelt ist es auch Schneller, oder genau so schnell oder langsamer.
Welche Methode ist jetzt schneller, bzw. solte schneller sein?
Sonst kann ich ja noch zeitstoppen, und dan durch Fakten eindeutig belegen lassen, was nun schneller sein soll.
Weil hatte mal frücher mit INNER JOIN rumexperementiert, und rausgefunden das wen man stat INNER JOIN einfach in der WHERE anweisung einfach die 2 IDs von den zwei mit = setzt. Dass es sogar etwas schneller sein. Naja, aber LEFT und RIGHT JOIN kann man wohl nicht so eligant umgehen.
Aber wer mich was besseren Lehren möchte, würde ich mich freuen:)
Nun ist natürlich die Frage gestelt ist es auch Schneller, oder genau so schnell oder langsamer.
Welche Methode ist jetzt schneller, bzw. solte schneller sein?
Sonst kann ich ja noch zeitstoppen, und dan durch Fakten eindeutig belegen lassen, was nun schneller sein soll.
Weil hatte mal frücher mit INNER JOIN rumexperementiert, und rausgefunden das wen man stat INNER JOIN einfach in der WHERE anweisung einfach die 2 IDs von den zwei mit = setzt. Dass es sogar etwas schneller sein. Naja, aber LEFT und RIGHT JOIN kann man wohl nicht so eligant umgehen.
Aber wer mich was besseren Lehren möchte, würde ich mich freuen:)