MySQL: GROUP BY mal absteigend, mal aufsteigend

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MySQL: GROUP BY mal absteigend, mal aufsteigend

    Hey leute habe da ein Problem wo ich einfach den Fehler nicht finde.

    Zur Lage.

    Ich habe eine DB zum Testen und eine für das live System.

    Ich will eine abfrage machen wo er mir den letzten werd eines users ausgibt und alle infos zu diesem.
    Soweit ganz toll auf der TestDB läuft das ganz schicke nur auf dem live system was itentisch ist mit dem test system geht das nicht da macht er die reinfolge faslch egal was ich im sagen er macht wie er gerade will.

    So nun mal zum text.

    Quellcode

    1. SELECT mitarbeiter.id AS mid, art, nachname, vorname , buchung
    2. FROM
    3. mitarbeiter
    4. inner join person
    5. on person.id = person_id
    6. inner join login
    7. on mitarbeiter.id = login.mitarbeiter_id
    8. inner join buchung
    9. on mitarbeiter.id = buchung.mitarbeiter_id
    10. WHERE mitarbeiter.id = buchung.mitarbeiter_id AND TO_DAYS(NOW()) - TO_DAYS(buchung) <= 0
    11. GROUP BY buchung.mitarbeiter_id DESC
    12. ORDER BY nachname
    Alles anzeigen

    Als ergebniss müsste ich sehen wann welcher user Online war oder ist.
    Ich kann mir den fehler einfach nicht erklären bin ja auch noch ziemlicher anfänger was SQL und PHP angeht. Da der Qeury im MySQL Qeurybrowser ach die falschen werte liefert habe ich ein PHP problem ausgeschloßen.

    Wie gesagt im test system liefert er mir immer den letzten eingetragen wert und im Live system den ersten. Habe auch schon einiges Probiert.

    Kann mir da jemand helfen?


    Zusatz:
    Lasse ich die GROUP BY Funktion weg bekomme ich ja die ganzen richtigen ergebnisse nur will ich ja nur von jedem User den letzten akktuelsten stand haben.

    Danke im vorraus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Norbi24 ()

  • Also Absteigend nach buchung und Aufsteigend nach Name? Das geht nur mit einem Subselect:

    Quellcode

    1. SELECT
    2. *
    3. FROM
    4. (
    5. SELECT * FROM
    6. mitarbeiter
    7. INNER JOIN person
    8. ON person.id = person_id
    9. INNER JOIN login
    10. ON mitarbeiter.id = login.mitarbeiter_id
    11. INNER JOIN buchung
    12. ON mitarbeiter.id = buchung.mitarbeiter_id
    13. ORDER BY buchung DESC
    14. ) x
    15. GROUP BY mitarbeiter_id
    16. ORDER BY nachname ASC
    Alles anzeigen
  • Nein ich kann auch Absteigend nach Namen anzeigen das ist egal es geht mir darum das sobald ich die group by Funktion benutze er mir den ersten gefunden wert vom User benutzt und nicht den, der zuletzt eingetragen ist.
    Mit einer subselect habe ich schon einmal die db lahm gelegt von daher ist das keine Lösung.

    Subselect test umgebung = geht
    Subselect Live system geht nicht^^

    Aber deanke für die Hilfe vieleicht hast du ja noch einen anderen vorschlag währe da für jeden Vorschlag dankbar.


    MfG
  • Also die buchung ist ein TIMESTAMP.
    Nein Buchung ist kein STRING das habe ich zuerst geprüft.
    Ja es soll das letzte datum angezeigt werden was es aber nicht macht. Ich vermute das irgendwie was mit der DB ist weil es ohne GROUP BY funktioniert dann habe ich aber alle daten will aber nur den letzten.

    Naja geht nicht heißt mache ich ein subselect im Live system macht der server sich daran tod habe den schon einmal abgeschoßen und das habe ich nicht ein zweites mal vor ^^ .

    Ich bin das ganze problem jetz mal umgangen in dem ich vorher eine SQL abfrage gemacht habe mit MAX (Buchung) dann habe ich eine neue Spalte angelegt und darin befindet sich eine ID.
    Ist eine ziemlich umstädnliche methode aber diese Funktioniert wer weis was der Admin da eingerichtet hat.

    Danke für eure Hilfe Denke bei einen Normalen System hätte meine Abfrage auch normal Funktioniert.

    mfg