Join oder 2 getrennte Abfragen?

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

  • Join oder 2 getrennte Abfragen?

    Also,

    betrifft den aufbau der Navigationsleiste meines Forums, an dem ich grad werke....

    SELECT g.gid AS gid, g.gtitle AS gtitle, f.ftitle AS ftitle, , mod.userid AS muserid, mod.name AS mname

    FROM $tbl_g AS g RIGHT JOIN $tbl_f AS f USING (gid)
    LEFT JOIN $tbl_mod AS mod USING (fid)
    WHERE fid=$fid && g.gareas IN ($area) && f.fareas IN ($area)



    .... erklährung:
    $tbl_g = group_table
    $tbl_f = forum_table
    $tbl_mod = moderator_table

    ein mod hat für jedes Forum das er moderiert 1 Zeile....
    im Group table sind max 6 Einträge, im Forum-table maximal 40 Einträge, und im Moderatortable max 120 ....
    die Verknüpfung der Tabellen ist über primarykeys bzw Index ... und ergebniszeilen bekomm ich maximal 4 (4 mods) ... die mods brauch ich später für den Seiten-Fuß

    ich geh mal davon aus, daß die mittlere Tabelle zuerst abgearbeitet wird....
    Stimmt das ???

    wenn ja ... .... nachdem das eine durchaus häufige Datenbankabfrage ist ... (Navigationsleiste) stellt sich die Frage ...
    ist es besser 2 Abfragen zu machen?
    die Navigation und die Mods des Forums seperat.... da hab ich ein mysql_fetch_assoc oder fetch_row mehr und eine mysql-query mehr.... andererseits wenn ich das Join verwende muß ich 2-3mal unnötig 2 Strings überschreiben. incl der übergabe von Mysql an PHP
    ????? *großes Fragezeichen*
    Ich weiß das sich das im Micro oder Nanosekundbereich bewegt, und daß die übersichtlichkeit des Programmcodes nicht gerade TOP ist, wenn ich das gemeinsam abfrage ..... aber mich täte es interessieren

    wenn nein
    hat sich die Frage erübrigt


    PS ist auch mehr eine theoretische Frage, die ich in anderen Bereichen sicher sinnvoller einstzten kan
    Zuletzt geändert von seekworld; 24.05.2006, 20:39.

  • #2
    http://www.php-resource.de/forum/sho...519#post450519
    Original geschrieben von ghostgambler
    Join ist bei weitem nicht immer die beste Möglichkeit ... manchmal ist ein einzelner gesonderter zweiter Query schneller, VIEL schneller, vor allem wenn man die Abfrage vorher konstruiert und dann außerhalb einer Schleife mit IN() oder so abfragen kann ... JOINS vermeide ich mittlerweile wo es geht, sie sind einfach zu lahm ....und ganz abgesehen davon auch schwerer zu programmieren/debuggen

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      das ist ein sehr aussagekräftige Antwort

      jetzt, wo ich mich so an die Joins gewöhnt hab ..... *grmpf* ...
      mit anderen Worten .. ne Abfrage
      SELECT @gid:=gid , ftitle FROM $tbl_f WHERE fid=$fid && fareas IN ($area) LIMIT 1
      SELECT gtitle FROM $tbl_g WHERE gid = @gid && gareas IN ($area) LIMIT 1

      wäre schneller??? (die Mods dann auch seperat)



      .... ne frage.... vielleicht lieg ich da auch so falsch ... hab mal gelesen, daß mysql die daten gar nicht anschaut, wenn sich alle Spalten in der WHERE-Abfrage als index definiert sind. wenn sich eine Spalte nicht im Index befindet wird vorher eingegrenzt, und dann nach dem Rest gesucht ....
      Also: wie hilfreich wäre es wenn ich die Spalte '_changes' oder '_areas' als Index definiere ???

      In diesen Spalten befindet sich die Info, ob der Beitrag der Thread versteckt ist bzw ob der User Zugang zu dem Forum hat .... brauche diese Spalte zwar nicht für Verknüpfungen, aber wenn ich zB vom Threadtable (AS t) :

      Select ..... Where t.fid=$fid && t.tchanges>0 LIMIT 500, 50
      mit join über 3 Tabellen (Threadtable, Postttable, 2xUsertable) mache ... wie sinnvoll wäre es da tchanges als index zu definieren???

      PRIMARY tid // Thread id
      INDEX fid // Forum id, brauch ich für die Joins und WHERE
      INDEX pid // last Post- id ebenfalls für die Joins
      INDEX userid // created by...Join, bzw für die Suche Threads created by
      Index tchanges ????????????????????????????????? für den WHERE Teil
      Zuletzt geändert von seekworld; 25.05.2006, 17:30.

      Kommentar

      Lädt...
      X