JOIN über drei Tabellen, Ausgabe nur bei IS_NULL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JOIN über drei Tabellen, Ausgabe nur bei IS_NULL

    Hallo

    Also ich habe versucht, was hier immer wieder angepriesen wird:
    Selbermachen *lach*
    Ich habe mir einen JOIN zusammengebastelt und würd mich freuen, wenn mal jemand drüber schauen und mir sagen könnte, ob er so korrekt ist, bzw. wie man ihn vielleicht noch optimieren können.

    Zum "Problem":

    Ich habe die folgenden 3 Tabellen:

    Tabelle 'mitglieder'
    (hier sind Profildaten der Mitglieder gespeichert)
    Felder:
    UserId, UserName, UserStatus, UserAlter

    Tabelle 'usertexte'
    (hier werden selbstgeschriebene Texte der user gespeichert)
    Felder:
    TextId, Text, TextUser, TextStatus

    Tabelle 'text_kommentare'
    (hier stehen Kommentare zu den einzelnen Texten drin)
    kommentar_id, kommentar_von, kommentar, kommentar_zu_textid

    Mit dem untenstehenden JOIN versuche ich nun folgendes:
    Ich möchte, das mir der Reihe nach (jeweils ein) zufälliger Text aus der Tabelle 'usertexte' ausgelesen wird.

    Die Voraussetzungen an diesen zufälligen Text:
    Nur Texte von Mitgliedern, deren UserStatus = 0 ist
    Nur Texte, deren TextStatus = 0 ist
    Nur Texte von Mitgliedern, die mindestens 25 Jahre als (Feld UserAlter)
    Nur Texte, zu denen ich als derjenige, dem der beitrag angezeigt wird, noch keinen Kommentar geschrieben habe (dies ist der fall, wenn in der tabelle 'text_kommentare' kein Eintrag mit meiner UserId vorhanden ist.

    Mein JOIN sieht nun so aus:

    PHP-Code:
    $result = @mysql_query("SELECT
                                            a.TextId,
                                            a.Text,
                                            b.UserId,
                                            b.UserName,
                                            b.UserAlter,
                                            c.kommentar_id
                                       FROM usertexte a
                                       LEFT JOIN mitglieder b
                                       on
                                            b.UserId = a.kommentar_von
                                       and
                                            b.UserStatus = 0
                                            and
                                            b.UserAlter > '25'
                                       LEFT JOIN text_kommentare c
                                       on
                                            a.TextId = c.kommentar_zu_textid
                                       and
                                            c.kommentar_von = '"
    .$MeineUserId."'
                                       WHERE
                                            kommentar_id IS NULL
                                       and
                                            b.UserName IS NOT NULL
                                       and
                                            a.TextStatus = '0'
                                       ORDER BY rand()
                                       LIMIT 1"
    ); 
    Das ganze scheint zu funktionieren, allerdings ist die Geschwindigkeit nicht die Beste
    Mich würde jetzt interessieren, ob der JOIN so wirklich richtig ist und ob sich da vielleicht etwas dran optimieren lässt.
    Ist mein erster wirklich komplexer Join
    Zuletzt geändert von Wannabe; 13.02.2006, 18:48.

  • #2
    OffTopic:
    du hast ein feld, in dem das UserAlter steht?


    schau dir mal EXPLAIN und das setzen von indizies an ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Original geschrieben von derHund
      OffTopic:
      du hast ein feld, in dem das UserAlter steht?



      Ja, also nein, ähm, nicht ganz.
      In UserAlter steht nicht das UserAlter, sondern der Geburtstag, nur hätte ich die Altersberechnung in der SQL-Abfrage hier jetzt drin gelassen, wäre es vielleicht ein bisschen arg undurchsichtig geworden, finde ich.

      Wieso verdrehst du die Augen???

      Original geschrieben von derHund
      schau dir mal EXPLAIN und das setzen von indizies an ...
      Ja, danke, ich werd mir EXPLAIN mal genauer ansehen.
      Danke schon mal für den Tipp
      Zuletzt geändert von Wannabe; 13.02.2006, 19:43.

      Kommentar


      • #4
        Wieso verdrehst du die Augen???
        weil ich hier wohl der einzige bin, dessen alter sich offiziell seit jahren nicht geändert hat
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar

        Lädt...
        X