Neueste Beiträge anzeigen PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
antworten
ausgeben
benutzer
code
datensatz
datum
forum
hilfe
jemand
karpfen
kategorie
limit
nutz
nutzen
posten
problem
tabelle
text
verwenden
-
hallo !
Ich habe für mein Forum zwei Datenbanktabellen, einmal "forum" und einmal "antworten".
Nun möchte ich gerne auf einer Seite die neuesten Beiträge ausgeben. Das klappt auch alles soweit, bis auf das Problem, das nur die neuesten Beiträge aus der Tabelle "forum" ausgegeben werden. Ich will aber, wie hier bei Lima-City, dass die neuesten Beiträge aus beiden Tabellen ausgegeben werden.
Wie mache ich das?
Meine SQL-Abfrage ist:
$sql = "SELECT ". " * ". "FROM ". "forum ". "ORDER BY datum DESC ". "LIMIT 15";
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich würde schlichtweg nur eine Tabelle für die Beiträge verwenden.
-
Mach einfach eine Thementabelle, in der nur die Themen selber gespeichert sind, die Beiträge (inklusive Eingangspost) speicherst du in eine Beitragstabelle und liest aus dieser dann aus. Beide Tabellen verknüpfst du dann mit Fremdschlüssel.
-
karpfen schrieb:
Mach einfach eine Thementabelle, in der nur die Themen selber gespeichert sind, die Beiträge (inklusive Eingangspost) speicherst du in eine Beitragstabelle und liest aus dieser dann aus. Beide Tabellen verknüpfst du dann mit Fremdschlüssel.
Ja, ich habe ja schon 2 Tabellen.
Tabelle "forum" für die Themen
Tabelle "antworten" für die Beiträge
Meine Frage ist, wie ich aus beiden Tabellen gleichzeitig auslese? -
Das Zauberwort heißt JOIN, allerdings vermute ich mal blind geraten, dass dich das überfordern wird, da man das als fortgeschrittenes MySQL bezeichnen kann (ist nicht böse gemeint, entspricht aber sicherlich der Wahrheit).
-
karpfen schrieb:
Kannst du mal einen Beispieldatensatz aus beiden Tabellen posten bitte?
Ja,
tabelle forum:
titel Gruender text Id kategorie datum datum2
d Admin d 53 Vorschlaege 08:09, 23.9.2009 1253686166
tabelle antworten:
Id Autor text datum datum2
12 Admin Jo, cool 08:09, 23.9.2009 1253686166
Mfg -
Sollte klappen...
select f.titel, f.gruender, f.id, f.datum AS forumdatum, a.id, a.autor, a.text, a.datum as antwortdatum from forum as f inner join antworten as a on f.id = a.forum
Problem ist allerdings das deine Antworten keine Referenz auf das Forum haben...mal davon abgesehen solltest du auch die Tabelle Forum nur für die Kategorien nutzen und eine extra Tabelle für die Themen anlegen sowie für die Benutzer ebenfalls eine.
Dann hättest du am Ende vier Tabellen: Benutzer, Foren, Themen, Antworten und könntest damit bereits ein kleines Forum realisieren.
Benutzer (ID, Name, ...)
Foren (ID, Name, Status, ....)
Themen (ID, ForenID, Name, ...)
Antworten (ID, ThemenID, BenutzerID, Inhalt, .....) -
So, ich würde sagen, dass der Datensatz erstmal nur Platz verbraucht und zweitens seh ich da keinen Zusammenhang in den beiden Tabellen.
Also wenn du schon unbedingt 2 Tabellen nutzen willst dann mach das so:
Forumtabelle
ID | Autor | Text | Kategorie | Datum
___________________________
10| Color | Beispieltext | Beispielkategorie | 1253686166
Dann die Antwortentabelle
ID | Thread | Autor | Text | Datum
_________________________
1 | 10 | User | Antwort1 | 1253687166
2 | 10 |User2| Antwort2..| 1253687566
.....
Nun kann man die Antworten durch die ID aus der Forentabelle ausfiltern.
Falls du nur eine machen willst nutze es einfach so
Forumstabelle
ID | Forum | Kategorie | Header | Text | Autor | Datum
________________________________________
1 | Hilfe/Faq| Beiträge | Wie schreibe ich einen gescheiten Beitrag | Ganz viel Text den eh nie jemand liest | Ich | jetzt ..
2 | Hilfe/Faq| Beiträge | Warum werden Themen gesperrt/gelöscht | Auch hier ganz viel Text | Jemand anderst | später
......
Aber gut machen wir es mal mit 2 Tabellen:
Erstmal damit man nur die ersten 10 Forentabelleneinträge auslesen kann
$forum = mysql_query("SELECT * FROM Forumtabelle LIMIT 10"); while($forum = mysql_fetch_assoc($forum)) { echo "<div><a title='' href='?forum="$forum['ID']">".$forum['Titel']."</a></div>"; }
Damit hätten wir mal die ersten 10 aufgelistet.
Dann brauchst du noch eine Abfrage nachdem der User auf den Link geklickt hat. Da du alles in 2 Tabellen hast wird das Ganze relativ umständlich.
Ich hab nicht viel erfahrung mit spezielleren SQL-Abfragungen deswegen sündige ich hier mal eben über JOIN und GROUP BY hinweg und schreibe es so:
$thema = mysql_query("SELECT * FROM Forumtabelle WHERE ID='".mysql_real_escape_string($_GET['forum']."' ") $Thema=mysql_fetch_assoc($thema); //..... Hier einfach alle daten aus diesem Eintrag ausgeben wie du es willst $ans = mysql_query("SELECT * FROM Antwortentabelle WHERE Thread='".mysql_real_escape_string($_GET['forum']."' "); while($Ans=mysql_fetch_assoc($ans)) { // .... alle anderen Themen posten.... }
Ich hoffe es hilft dir weiter, falls Tippfehler drin sind sry, aber ich habs nicht ausprobiert. Aber ich denke du wirst das schon hinbekommen.
Grüsse
Color
Beitrag zuletzt geändert: 23.9.2009 10:22:45 von color -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage