[gelöst] Letzten Eintrag via JOIN erhalten ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [gelöst] Letzten Eintrag via JOIN erhalten ?

    Hallo Community,

    der folgende Query ist etwas länger weshalb ich erstmal vorweg erkläre, was ich haben will;

    Man kann als Benutzer Projekte anlegen, screenshots dazu hochladen und in zukunft soll man auch Blogeinträge zu seinem Projekt verfassen können.

    Auf der Startseite werden dann die letzten 10 Projekte gelistet. Mit Screenshot, der Beschreibung und Benutzernamen. Insgesamt brauche ich also Daten aus 4 verschiedenen Quellen. Das ging bisher auch ganz gut.

    Nur jetzt möchte ich halt wie gehabt auf der Startseite die letzten 10 Projekte anzeigen. Die werden bisher auch nach der letzten Aktualisierung sortiert. Jetzt soll allerdings auch nach dem Datum der Blogeinträge sortiert werden, wenn welche vorhanden sind.

    Auch das geht ganz gut... nur bekomme ich immer den ersten Eintrag in der Blogtabelle statt den Letzten. Irgendwo hier im Board habe ich nach ein wenig Suchen gelesen, dass MAX(wert) mir den letzten Eintrag holt. Das klappt zwar bei der Sortierung scheinbar einwandfrei, jedoch erhalte ich bei "MAX(b.blog_subject)" weder den letzten noch den ersten Eintrag, sondern einfach den zweiten...

    Es würde mich sehr freuen, wenn mir jemand einen Tipp geben könnte, wie ich den letzten Blogeintrag zu jedem Projekt bekomme.

    Hier mein momentaner Query:

    Code:
    SELECT p.project_name,
               p.project_ID,MAX(b.blog_subject),
    	p.project_last_update, 
    	p.project_desc, 
    	UNIX_TIMESTAMP( p.project_last_update ) AS project_date, 
    	u.user_name, 
    	u.user_ID, 
    	s.screen_ID
    FROM project p
    LEFT JOIN user u ON u.user_ID = p.project_user_ID
    LEFT JOIN screenshots s ON p.project_ID = s.screen_project_id
    LEFT JOIN blog b ON p.project_ID = b.blog_project_ID
    WHERE p.message =0
    GROUP BY p.project_ID
    ORDER BY MAX(b.blog_date) DESC, p.project_last_update DESC
    LIMIT 0 , 10

  • #2
    Andere Tabellenspalten als die, über die Gruppiert wird, zu selektieren, ist in richtigem SQL nicht erlaubt.
    MySQL erlaubt es zwar, liefert dir dann aber für alle Spalten, die nicht in der Gruppierung enthalten sind, den Wert aus einem zufälligen Datensatz.

    Der ganze Ansatz ist also unbrauchbar.

    Eine korrelierte Unterabfrage könnte evtl. das sein, was du suchst.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Super, Unterabfragen sind etwas, dass ich schon des Öfteren mal gebraucht hätte. Jetzt weiß ich endlich dass es sie gibt .

      Achja, Problem konnte ich mit Unterabfragen problemlos lösen !

      Gute Nacht.

      Kommentar


      • #4
        Hallo,

        bei Unterabfragen (und ganz besonders bei korrelierten) leidet die Performance. Ich finde da persönlich die Variante des "negativen left join" am besten.

        Unter MySQL :: MySQL 5.0 Reference Manual :: 3.6.4 The Rows Holding the Group-wise Maximum of a Certain Column findest du die als Beispiel ganz unten.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar

        Lädt...
        X