Forum: Performancefrage

mAu

Erfahrenes Mitglied
Hallo Community!
Ich programmiere grade mal wieder was, um nicht ganz aus der Materie rauszukommen (ein Forum, ist aber nicht für die Veröffentlichung bestimmt, wie gesagt, nur zur Übung...). Naja das tut auch nichts zur Sachen. Folgende Frage stellt sich mir: Wenn ich die Foren mit den Unterforen auslese, komm ich schon bei ~20Boards auf ~30MySQL Querys... Wäre es besser, erstmal alle in ein Array zu schreiben und dann nachher auseinanderzupflücken und auszugeben? Bzw. gibt es ein Richtwert, wieviele Querys man so maximal an MySQL absetzen sollte?

Das war's auch schon :) Danke fürs lesen!
 
Ja, daran hab ich auch schon gedacht, mich aber erst gescheut das einzusetzen, weil ich des Öfteren gehört habe, dass das recht kompliziert sei. Aber jetzt hab ich mich etwas in die Materie eingearbetet und es läuft.
Aber jetzt stellt sich mir eine Frage...
Ich hab meine Foren jetzt also in so einem Baum etwa:
Code:
Root
  +Forum1
    +Subboard1
    +Subboard2
      +Subboard2/1
    +Subboard3
  +Forum2
  +Forum3
Wie schaffe ich es jetzt, nur die Ebene mit den Subboards 1-3 auszulesen? Ich komm schon soweit, alle Subboards (also inklusive Subboard 2/1) auszulesen, aber ich brauch nur die 1-3... Tipps?
 
Nach mehrstündigem rumexperimentieren und zig Googleresults bin ich nun endlich auf die Lösung gestoßen. Bei obigem Tabellenaufbau ergibt sich folgende Abfrage, wobei $lft und $rgt die LFT und RGT Werte des übergeordneten Knotens sind (in dem Fall von oben also Forum1):
SQL:
SELECT `node1`.`payload`,
COUNT(`node1`.`root_id`) AS `level`

FROM `node` AS `node1`,
`node` AS `node2`

WHERE `node1`.`root_id` = 1
AND `node2`.`root_id` = 1

AND `node1`.`lft` BETWEEN `node2`.`lft` AND `node2`.`rgt` AND `node2`.`lft` >= $lft AND node2.rgt <= $rgt

GROUP BY node1.LFT
HAVING `level` = 1
 
Zurück