2009-06-20 3 views
0

Ich bin ein Neuling, also ertragen Sie mit mir. Ich mache ein kleines Forum zum Spaß. Check it:Arbeiten mit Master/Detail SQL-Daten in PHP

Kategorien:

`id` int(10) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `position` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 

Foren:

`id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `description` text NOT NULL, 
    `position` int(11) NOT NULL, 
    `cat_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 

Ich frage mich, wie ich sollte es strukturieren, so dass es die Kategorien Schleifen und die abgetretenen Foren darunter:/

Bin ich auf dem richtigen Weg?

<?php 
    $query = mysql_query("SELECT * FROM forums JOIN..."); 
    while ($row = mysql_fetch_array($query)) {.. 
    ?> 

Vielleicht kann einige SQL Guru mir helfen.

Prost!

Antwort

0

Wenn Sie die Kategorien mit Foren unter ihnen auf Ihrer Seite anzeigen möchten, vermute ich, dass Sie eine Ergebnismenge für die Kategorien zuerst abrufen müssen, und dann über diese Liste mit einer anderen Schleife für Ihre Forum-Liste.

Ein Join gibt Ihnen ein einzelnes Re-Cord-Set mit der Kategorie in einer Spalte und das Forum in einem anderen, das Ihnen viele Zeilen für eine einzelne Kategorie gibt. Als eine andere Antwort gesagt hat, sind Sie auf der Suche nicht wirklich für eine beitreten :)

Probieren Sie etwas wie folgt aus:

$cat_rs = mysql_query("select id, name from categories"); 
while($cat_row = mysql_fetch_array($cat_rs)){ 
    // print category name from $cat_row[1] 
    $forum_rs = mysql_query("select name... from forums where cat_id = '" . $cat_row[0] ."'"); 
    while($forum_row = mysql_fetch_array($forum_rs)){ 
     //print forum stuff 
    } 
} 
+0

eine MySQL-Abfrage wie folgt in einer inneren Schleife Having wird langsam sein im Vergleich zu bekommen alle Daten in einer Abfrage. –

+0

Sie haben recht, aber ich nehme an, die Datensätze sind klein, und der Aufwand, das erforderliche Äquivalent von "select distinct" in PHP auszuführen, würde viel mehr Arbeit erfordern, als es angemessen wäre; entweder eine ernsthafte Hackerei mit Bedingungen oder die Konstruktion eines hierarchischen Datensatzes, der Gegenstand einer komplizierteren Frage sein würde :) –

0

Ich denke, Sie würden am besten lesen join tutorial, um Ihnen zu helfen, die Grundlagen zu verstehen.

0

Ich kenne PHP nicht, aber es sieht so aus, als ob Sie eine einzelne Abfrage verwenden möchten, um die Kategorien zu durchlaufen und dann für jede Kategorie die Foren zu durchlaufen.

Relationale Datenbanken funktionieren nicht so. Eine Abfrage gibt eine Reihe von Zeilen in Form einer Tabelle zurück. Es gibt keine Eltern/Kind-Struktur.

Wenn PHP dazu in der Lage ist, sollten Sie eine Elternabfrage haben, um alle Kategorien zurückzugeben und eine Schleife darüber zu führen. Rufen Sie für jede Kategorie eine untergeordnete Abfrage auf, um die Foren mit dieser Kategorie-ID zurückzugeben. Dann wiederhole das.

Verwandte Themen