ilch Forum » Allgemein » HTML, PHP, SQL,... » Foren SQL Abfrage

Geschlossen
  1. #1
    User Pic
    Liver Mitglied
    Registriert seit
    12.08.2009
    Beiträge
    76
    Beitragswertungen
    0 Beitragspunkte
    Ich habe eine Frage zu SQL.
    Also, ich möchte eine last Forum Box programmieren.
    bzw habe ich schon, leider werden, wenn in einem Thema mehrere Post hintereinander gemacht wurden diese auch in der Box gezeigt.
    ich versuche das problem hier mal darzustellen:

    User1 bei Thema:
    Leute schreiben gerne

    User3 bei Thema:
    Was bedeutet PHP

    User7 bei Thema:
    Leute schreiben gerne

    User2 bei Thema:
    Weiteres Thema

    User5 bei Thema:
    Weiteres Thema

    User9 bei Thema:
    Leute schreiben gerne

    eigentlich sollte es ja so ausehen:

    User1 bei Thema:
    Leute schreiben gerne

    User3 bei Thema:
    Was bedeutet PHP

    User2 bei Thema:
    Weiteres Thema

    wisst ihr was ich meine?
    wenn ja, gut.
    jedenfalls hab ich schon in der ilch datei dazu geguckt, aber ich kann das leider leider nicht entziffern.
    wäre schön wenn mir hier einer die richtige abfragen machen kann ^^

    Hier sind die jeweiligen relevanten tabellen und felder(namen der tabellen und felder abgeändert zwinker )

    posts (post bzw antworten auf ein thema)
    post_id (id vom post)
    user_id (user der den post verfasst hat)
    post_time (aktuelle "time()" bei erstellung)
    post_inhalt (text vom post)
    thema_id (id vom thema unter dem der post zu finden ist)

    themen (alle themen worunter die posts zu finden sind)
    theme_id (id vom thema)
    theme_name (name des themas)
    user_id (user der das thema erstellt hat)
    theme_time (aktuelle "time()" bei erstellung)

    ok das sund zwar nicht alle felder, zum Beispiel fehlt die zeit wo der jeweilige post editiert wurde oder in welchem forum sich ein thema befindet. das ist aber denk ich mal nebensache. am besten macht ihr dann einfach ein SELECT * FROM denn ich denke ma, das ist ja nicht wichtig. immerhin kommt ilch auch nur mti einer abfrage klar zwinker

    bitte um hilfe!!!

    betroffene Homepage: externer Link


    Zuletzt modifiziert von Liver am 14.09.2009 - 02:38:42
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Gleich mal vornweg, bei ilch gibts extra eine Spalte in der Themen Tabelle, wo der letzte Post drin steht.

    SELECT c.* , d.*
    FROM (
    SELECT MAX( a.post_id ) AS id, a.thema_id
    FROM posts a
    GROUP BY a.thema_id
    ) AS b
    LEFT JOIN posts c ON b.post_id = c.post_id
    LEFT JOIN themen d ON b.thema_id = d.theme_id


    Ich finds ehrlich gesagt, komisch, dass du einmal thema_id und einmal theme_id hast, falls das nur ein Tippfehler war, müsstest du die Abfrage natürlich noch anpassen.

    Weiter solltest du beachten, dass wenn 2 Spalten gleich heißen, das letzte vorkommen davon benutzt wird, in diesem Fall also z.B. d.user_id (welches c.user_id überschreibt)
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Liver Mitglied
    Registriert seit
    12.08.2009
    Beiträge
    76
    Beitragswertungen
    0 Beitragspunkte
    hmm, ich raff es leider noch immer nicht traurig
    kannst du mir es vielleicht mit klammern erklären lächeln
    das wäre echt cool ^^
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ach du wolltest das erklärt haben, wo stand denn das, naja ich musste auch erst etwas testen und überlegen.

    Wie müssen halt zu jedem Thema den letzten Post auslesen, das kann man halt mit MAX und einem GROUP BY bewerkstelligen.

    SELECT MAX( a.post_id ) AS id, a.thema_id
    FROM posts a
    GROUP BY a.thema_id

    um mit dem Ergebnis weiterzuarbeiten, hab ich halt ne Klammer drum gesetzt und mit AS ein Alias gesetzt, in diesem Fall b und dann kannst du das wie ne andere Tabelle, die halt die 2 Felder id und thema_id hat und mit JOINS die eigentlichen Daten abfragen, wenn du nicht weißt was ein JOIN ist, solltest du mal etwas im Internet suchen, das gilt auch für Sachen wie MAX und GROUP BY.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Liver Mitglied
    Registriert seit
    12.08.2009
    Beiträge
    76
    Beitragswertungen
    0 Beitragspunkte
    sorry, ich hab mir die abfrage wegen zeitproblemen jetzt erst angesehen und ausprobiert.
    es funktioniert...halb!
    ich hab mal die last forum box 2 mal programmiert.
    einmal mit meiner abfrage und einmal mit deiner.
    Hier kommen folgene Ergebnisse raus:

    Meine:
    KingJ , 12.10.2009 - 21:03:
    Spam Ecke
    L!ver , 12.10.2009 - 18:11:
    Spam Ecke
    Garma , 12.10.2009 - 18:09:
    Spam Ecke
    L!ver , 12.10.2009 - 18:05:
    Spam Ecke
    Garma , 12.10.2009 - 18:03:
    Spam Ecke
    L!ver , 12.10.2009 - 17:53:
    Spam Ecke
    Cyno , 12.10.2009 - 17:09:
    Spam Ecke
    Cyno , 12.10.2009 - 16:28:
    Super Smash Bros Brawl Textur...
    L!ver , 12.10.2009 - 00:23:
    Ocean´s 13
    pascal010 , 12.10.2009 - 00:06:
    Wi-Fi spielen
    pascal010 , 12.10.2009 - 00:05:
    First Post of the Day
    pascal010 , 11.10.2009 - 23:37:
    Ocean´s 13
    L!ver , 11.10.2009 - 21:35:
    Ocean´s 13
    L!ver , 11.10.2009 - 19:44:
    Sora - Quittet Brawl!
    Mike , 11.10.2009 - 19:35:
    Sora - Quittet Brawl!

    Deine:

    L!ver , 31.08.2009 - 00:37:
    Spam Ecke
    Deathwolf , 20.09.2009 - 15:44:
    Super Smash Bros Brawl Textur...
    L!ver , 11.10.2009 - 21:35:
    Ocean´s 13
    Garma , 02.09.2009 - 09:29:
    Wi-Fi spielen
    L!ver , 13.09.2009 - 23:58:
    First Post of the Day
    Sora , 10.10.2009 - 14:08:
    Sora - Quittet Brawl!
    DNL , 06.10.2009 - 21:57:
    Probleme mit Ilch.de, brauche ...
    Garma , 03.09.2009 - 15:13:
    Verbesserungsvorschläge / Ide...
    L!ver , 09.10.2009 - 20:13:
    Games Bereich
    Sora , 08.10.2009 - 15:22:
    Gerüchte für einen Zelda Fil...
    Mike , 06.10.2009 - 19:00:
    Zuletzt Gezockt
    Deschlaa , 07.10.2009 - 12:35:
    LittleBigPlanet
    Deschlaa , 07.10.2009 - 12:18:
    Ich melde mich wieder...
    L!ver , 10.09.2009 - 17:06:
    Was habt ihr heute schon gezoc...
    Domme , 06.10.2009 - 15:44:
    Euer zuletzt gekauftes Spiel?

    sorry wenn es etwas unübersichtlich ist, aber wenn man genau hinsieht, merkt man, dass er die themen schon richtig organisiert.
    jedoch holt er sich nicht den letzten post aus jedem topic, sondern nur den ersten. also, vom dem, der das thema erstellt hat.

    die sql abfrage sieht atm so aus:
    "SELECT c.* , d.*
    FROM (
    SELECT MAX( a.id ) AS id, a.topic 
    FROM wb_f_posts a 
    GROUP BY a.topic
    ) AS b
    LEFT JOIN wb_f_posts c ON b.id = c.id 
    LEFT JOIN wb_f_topics d ON b.topic = d.id ORDER BY c.id DESC LIMIT 15"


    ich hab schon jegliche kombinationen von ORDER BY ausprobiert, aber hab nichts geschafft...
    (ach verdammt ich will sql in der schule haben! xD )


    Zuletzt modifiziert von Liver am 13.10.2009 - 06:15:47
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Liver Mitglied
    Registriert seit
    12.08.2009
    Beiträge
    76
    Beitragswertungen
    0 Beitragspunkte
    ...das ist echt wichtig für mich traurig
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Balthazar3k Mitglied
    Registriert seit
    23.04.2006
    Beiträge
    422
    Beitragswertungen
    7 Beitragspunkte
    sicher das es an der SQL liegt und nich am PHP ausgabe script?
    Kein Support für den Raidplaner über PM.
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Hippo4u Mitglied
    Registriert seit
    02.10.2009
    Beiträge
    19
    Beitragswertungen
    0 Beitragspunkte
    Vermute ich auch...

    Ich kann dir da nur Navicat ans Herz legen. Mit dem Abfragen Builder kann man sowas am schnellsten nachprüfen ob es am SQL liegt..
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Liver Mitglied
    Registriert seit
    12.08.2009
    Beiträge
    76
    Beitragswertungen
    0 Beitragspunkte
    habs geschafft
    es lag net am script, sondern wirklich an der abfrage.
    ein kumpel von mir hat sich da den kopf drüber zerbrochen xD

    hier is die neue und funktionstüchtige abfrage:
    SELECT c.* , d.id
    FROM (
    SELECT MAX( a.id ) AS id, MAX( a.create_time ) AS create_time, a.topic 
    FROM wb_f_posts a 
    GROUP BY a.topic
    ) AS b
    LEFT JOIN wb_f_posts c ON b.id = c.id 
    LEFT JOIN wb_f_topics d ON b.topic = d.id ORDER BY c.id DESC LIMIT 15
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten