Daten aus DAtenbank werden doppelt dargestellt

saromir

Grünschnabel
Hallo, ich habe ein kleines Problem, vermutlich mit meiner DB. Wenn ich Daten per SQL in PHP abfrage werden sie mir doppelt angezeigt, das gleiche passiert auch wenn ich die Abfragen in mysql teste.

DB ist folgendermaßen aufgebaut:

Tabelle blackboard:
id
betreff
text
datum
user

Tabelle login:
id
username
passwort
kontakt

Nun möchte ich mit folgender Abfrage Betreff, Datum und Name anzeigen lassen:

PHP:
$blackboard_sql = "SELECT * FROM blackboard, login WHERE blackboard.id = ".$_GET['id'];
		$blackboard_erg = mysql_query($blackboard_sql);
		$blackboard = mysql_fetch_assoc($blackboard_erg);
		

			echo "<tr>" .
			"<td style='text-align:center'>" . $blackboard['datum'] . "</td>" .
			"<td style='text-align:center'>" . $blackboard['betreff'] . "</td>" .
			"<td style='text-align:center'>" . $blackboard['text'] . "</td>" .
			"<td style='text-align:center'>" . $blackboard['username'] . "</td>" .
			"<td style='text-align:center'>" . $blackboard['kontakt'] . "</td>" .
			"</tr>\n";

Das funktioniert auch, nur wird für jeden Benutzer den ich anlege alled Daten angezeigt, anstatt nur die die der BEnutzer auch wirklich angelegt hat.

Leder weiß ich nicht wo der Fehler liegt, bzw ich kann Ihn nicht finden. Vermute aber dass er bei meiner DB liegt.
 
Der Fehler ist, dass du keine Bedingung für die login Tabelle setzt... Wie genau sind die Tabellen denn verkettet? Von blackboard.user zu login.id?
 
Ja von login.id zu blackbord.user was meinst du mit Bedingung? Limit? Weil ein Where bringt ja dabei nichts. Ich habe zb 3 Einträge mit 3 Usern erstellt also sollen alle 3 Einträge dargestellt werden mit dem passenden user. Weißt du was ich mein?
 
Warum dann keine JOIN-Abfrage?

PHP:
$sql = "SELECT blackboard.betreff, blackboard.text, blackboard.datum, login.username FROM blackboard JOIN login ON blackboard.id =  login.id WHERE blackboard.id = " .$_GET["id"];
 
Ja von login.id zu blackbord.user was meinst du mit Bedingung? Limit? Weil ein Where bringt ja dabei nichts. Ich habe zb 3 Einträge mit 3 Usern erstellt also sollen alle 3 Einträge dargestellt werden mit dem passenden user. Weißt du was ich mein?

Die 2 Tabellen login und blackboard sind in deinem SQL nicht verbunden. Somit gibt es count(login)*count(blackboard) Datensätze aus.
Die Lösung ist der Join wie tombe ihn dargestellt hat (und wenn du das SQL auch noch formatierst, dann sieht man Fehler auch schneller)
 
Hi, ja gut das mit dem join leuchtet mir ein, jedoch geht das mit GET nicht, da zu dem Zeitpunkt an dem die Abfrage gemacht wird, niemand eingelogt ist.
 
...jedoch geht das mit GET nicht, da zu dem Zeitpunkt an dem die Abfrage gemacht wird, niemand eingelogt ist.

Den GET-Parameter hast du oben doch selber eingebaut!
Dann musst du es halt in einen IF-Block packen der prüft ob jemand eingelogt ist oder nicht. Die Frage ist soll dann gar nicht angezeigt werden oder sollen dann alle angezeigt werden?
 
Zurück