MySQL Abfrage vereinfachen (verschachtelung), wer kann helfe

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Mafia GmbH
Mitglied
Beiträge: 355
Registriert: 13.10.2003 16:09

MySQL Abfrage vereinfachen (verschachtelung), wer kann helfe

Beitrag von Mafia GmbH »

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.
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

Kannst du kurz beschreiben was du damit machen willst? Wofür brauchst du eine derartige Abfrage?
Benutzeravatar
Mafia GmbH
Mitglied
Beiträge: 355
Registriert: 13.10.2003 16:09

Beitrag von Mafia GmbH »

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?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

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
Benutzeravatar
Mafia GmbH
Mitglied
Beiträge: 355
Registriert: 13.10.2003 16:09

Beitrag von Mafia GmbH »

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:)
Antworten

Zurück zu „Coding & Technik“