Der join dein Feind, wie verbinde ich diese beiden Query ?

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

  • Der join dein Feind, wie verbinde ich diese beiden Query ?

    Code:
    SELECT  tb.fid,
            tb.tid,
            tb.topicname,
            tb.erstellerid,
            tb.helped,
            tb.state,
            us.pseudonym,
            tb.hits
    
    FROM    topics tb,
            user us
            
    WHERE   fid=".$forum." AND
            tb.erstellerid = us.erstellerid
    und

    PHP-Code:
    $query "SELECT    DISTINCT tid
              FROM      topicbeitraege
              WHERE     fid = "
    .$forum."
              ORDER BY  eid DESC LIMIT "
    .(($zeigeseite-1)*20).",20"); 
    Der zweite gibt mir die tid 's die ich haben will, diese will ich von den anderen beiden Tabellen dann mit Daten füllen lassen. Klar was ich meine ?


    EDIT:
    umbrüche by Abraxax
    Zuletzt geändert von Abraxax; 11.09.2003, 20:54.

  • #2
    zuerst einmal habe ich deine 1. query verJOINt ...

    Code:
    SELECT  tb.fid,
            tb.tid,
            tb.topicname,
            tb.erstellerid,
            tb.helped,
            tb.state,
            us.pseudonym,
            tb.hits
    
    FROM    topics tb
                LEFT JOIN user us USING(erstellerid)
            
    WHERE   fid=".$forum
    was hast du mit der 2. query vor? meine glaskugel wird gerade gereinigt.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Code:
      SELECT tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits, b.*
        FROM topics tb
        LEFT JOIN user us
          ON tb.erstellerid = us.erstellerid
        LEFT JOIN topicbeitraege b
          ON tb.fid = b.fid
         AND tb.tid = b.tid
       WHERE tb.fid=$forum
      Willst Du zum Beispiel Beiträge zählen, probier' sowas:

      Code:
      SELECT tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits, COUNT(b.tid) counted
        FROM topics tb
        LEFT JOIN user us
          ON tb.erstellerid = us.erstellerid
        LEFT JOIN topicbeitraege b
          ON tb.fid = b.fid
         AND tb.tid = b.tid
       WHERE tb.fid=$forum
       GROUP BY tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        [MySQL 4.0] hmm,

        @Abraxax
        was ich vor habe ?

        Ganz einfach ich möchte den ersten Query nach dem zweiten sortiert auslesen.
        Sprich nach der tid , diese soll allerdings nach der topicbeitraege.eid sortiert sein.

        @goth
        Der erste ist schon rech gut, hab ihn dahin erweitert
        Code:
        SELECT tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits, b. * 
        FROM topics tb
        LEFT  JOIN user us ON tb.erstellerid = us.erstellerid
        LEFT  JOIN topicbeitraege b ON tb.fid = b.fid AND tb.tid = b.tid
        WHERE tb.fid = 4
        ORDER BY b.eid DESC
        jetzt fehlt mir nur noch das DISTINCT des zweiten Querys da drin, weil so bekomm ich alle Topics ausgegeben, ich brauche aber immer nur einen und zwar den mit der höchsten topicbeitraege.eid .
        Zuletzt geändert von JoelH; 12.09.2003, 02:31.

        Kommentar


        • #5
          [MySQL 4.0] hmm,

          noch ein wenig probiert aber irgendwie wird das nix
          Ich hab jetzt
          Code:
          SELECT  b.tid, b.eid, tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits
          FROM topicbeitraege b
          LEFT  JOIN topics tb ON tb.fid = b.fid AND tb.tid = b.tid
          LEFT  JOIN user us ON tb.erstellerid = us.erstellerid
          WHERE b.fid = 4
          ORDER  BY b.eid DESC
          Der ist sogar 9 sec. schneller als der andere bringt das selbe Ergebnis, leider immer noch das Falsche

          Er gibt zuviel zurück

          Ich bekomme jetzt
          sowas
          [FONT=courier]
          tid | eid | ........
          120 | 800 | ...
          120 | 798 | ....
          120 | 796 | ...
          112 | 795 | ....
          118 | 791 | ....
          [/FONT]
          ich hätte aber gerne nur
          [FONT=courier]
          tid | eid | ........
          120 | 800 | ...
          112 | 795 | ....
          118 | 791 | ....
          [/FONT]
          also lasse ich das b.eid im SELECT weg bekomme dann aber leider nur
          [FONT=courier]
          tid | ........
          120 | ...
          118 | ....
          112 | ....

          [/FONT]
          das ist falsch sortiert Er sortiert dann nimmer nach der eid sondern wieder nach der tid Warum ?

          PS:
          @goth
          Dein zweiter Query ist auch nicht schlecht Ja ich will auch mitcounten
          Code:
          SELECT tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits, COUNT(b.tid) counted
            FROM topics tb
            LEFT JOIN user us
              ON tb.erstellerid = us.erstellerid
            LEFT JOIN topicbeitraege b
              ON tb.fid = b.fid
             AND tb.tid = b.tid
           WHERE tb.fid=4
           GROUP BY tb.fid, tb.tid, tb.topicname, tb.erstellerid, tb.helped, tb.state, us.pseudonym, tb.hits
          ORDER BY b.eid DESC
          Wieder sortiert nach der b.eid DESC leider auch hier das selbe Problem, er ignoriert einfach das ORDER BY
          Zuletzt geändert von JoelH; 12.09.2003, 03:59.

          Kommentar

          Lädt...
          X