Zugehörigkeit von MySQL-Einträgen

Vocast

Grünschnabel
Hi zusammen!

Ich sitze hier an nem Problem und bin am Verzweifeln... Ich hab ein kleines Forum geschrieben - funktioniert tadellos. Nur, vielleicht ist es das einfachste der Welt, klappt bei mir quasi die Gruppierung nicht... Als Beispiel, wie ich das meine

ÜBERSCHRIFT
--FORUM1
--FORUM2
ÜBERSCHRIFT2
--FORUM3

etc.

Foren, Beiträge, Antworten erstellen, anzeigen etc. klappt - nur wie bekomme ich die überschriften hin?

Habe den Foren jetzt schon eine "Überschriften_ID" zugewiesen... Würde auch klappen, aber ich bekomme die Überschrift laufend wieder mit ausgegeben.
Ich komm einfach nicht drauf... Bitte helft mir :(

Hier mal die Abfrage bisher:
PHP:
<?
$connect = mysql_connect("localhost", "name", "pw");
$db = mysql_select_db("DB");
$res=mysql_query("select * from foren, headline");
while ($row = mysql_fetch_array($res))
	if ($row["hid"] == $row["thid"]){
	echo $row["hame"]."<br>";
	echo "<a href=\"showthreads.php?fid=".$row["id"]."\">";
	echo $row["name"]."</a><br>";}
	
?>

Gibt doch bestimmt ne bessere lösung für sowas?
 
Du hast die Lösung doch schon erwähnt: Gruppiere die Datensätze einfach. Anschließend solltest du die Überschriften zwischenspeichern und sie nur dann ausgeben, wenn eine neue nicht mit der vorherigen übereinstimmt, etwa:
PHP:
$tmp = null;
while( … ) {
	if( $tmp != $headline ) {
		echo $headline;
	}
	$tmp = $headline;
	…
}
 
Also...
Dank dir erstmal!

Aber ich komm als noch nicht drauf...
Wenn, dann bekomme ich ALLE Foren angezeigt, aber nie nur diejenigen, die auch wirklich zur Überschrift gehören... Vielleicht klebe ich auch schon zu lange an dem Ding... Ich muss doch nach der Überschriften ID gruppieren, oder?
 
Probier mal Folgendes:
PHP:
<?php

	$connect = mysql_connect("localhost", "name", "pw");
	$db = mysql_select_db("DB");

	$query = '
		SELECT
		        *
		  FROM
		        `foren`,
		        `headline`
		  WHERE
		        `headline`.`hid` = `foren`.`thid`
		  GROUP BY
		        `headfile`.`hid`
		';
	$result = mysql_query($query)
		or die(mysql_error());
	$tmp = null;
	while( $row = mysql_fetch_assoc($result) ) {
		if( $tmp != $row['hame'] ) {
			echo $row['hame'];
		}
		$tmp = $row['hame'];
		echo '<a href="showthreads.php?fid='.$row['id'].'">'.$row['name'].'</a><br>';
	}
    
?>
Übrigen solltest du jede auszuwählende Spalte einzeln aufführen anstatt den Universalselektor „*“ zu nehmen.
 
Hab ich jetzt so aus dem kopf ausgeschrieben:
PHP:
<?php

$lastHead = '';
$result = mysql_query('SELECT * FROM foren, headline WHERE foren.uid = headline.uid SORT BY headline.uid ASC;');
while($row = mysql_fetch_assoc($result)) {

if ($lastHead != $row['head']) {
echo $row['head'];
$lastHead = $row['head'];
}
echo $row['forentitel'];
}
?>
foren.uid und headline.uid sind die ID's für die Überschriften, head ist die Gruppenüberschrift und forentitel eben der Forentitel.

Wenn fragen da sind, fragen :D

mfg
 
Vielen Dank euch beiden

Habe nun beide Möglichkeiten ausprobiert...

Gumbo:
! Es wird aber nicht jedes Forum angezeigt... Ich bekomme immer nur das erste... der Rest fällt weg und es kommt die neue Überschrift und das nächste Forum..

Meilon:
Bei deiner Variante bekomme ich grad gar nichts angezeigt, nur ne Fehlermeldung.
Die da wäre:
Code:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in showforen.php on line 5

Ich glaub, wir sollten das Ding alle auf Morgen verschieben... :-)
 
Der Fehler könnte von daher kommen, dass ich nicht weiß, wie genau deine Datenbank aussieht. Müsstest daher die Abfrage demnach noch anpassen.
 
meilon hat gesagt.:
Der Fehler könnte von daher kommen, dass ich nicht weiß, wie genau deine Datenbank aussieht. Müsstest daher die Abfrage demnach noch anpassen.
Das versteht sich ja wohl von selbst!? Trotzdem bekomme ich ne Fehlermeldung (s.o.)... Ich verstehs nicht mehr. Vielleicht sollte ich doch morgen weiter machen ;)
 
OK...

Tabelle: headline
hid --- int(11) --- auto_increment
name --- tinytext

Tabelle: foren
id --- int(11) --- auto_increment
name --- tinytext
thid --- int(11)

Thid ist hierbei die HID der Headline, so dass jedes Forum, welches die THID x hat mit der HID x der Headline übereinstimmt....
 
Zurück