kostenloser Webspace werbefrei: lima-city


Neueste Beiträge anzeigen PHP

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s************m

    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";
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich würde schlichtweg nur eine Tabelle für die Beiträge verwenden.
  4. Autor dieses Themas

    s************m

    karpfen schrieb:
    Ich würde schlichtweg nur eine Tabelle für die Beiträge verwenden.



    Die 2 Tabellen sind ja einmal für die Themen und die andere für die Antworten, darum muss ich 2 benutzen
  5. 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.
  6. Autor dieses Themas

    s************m

    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?
  7. Kannst du mal einen Beispieldatensatz aus beiden Tabellen posten bitte?
  8. 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).
  9. Autor dieses Themas

    s************m

    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
  10. e********l

    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, .....)
  11. 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
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!