tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
2561
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    leuktra leuktra ist offline Mitglied Silber
    Registriert seit
    Jan 2006
    Beiträge
    52
    Hallo zusammen,

    ich habe zwei Tabellen. Zwischen tbl_schueler (klassen_key) und tbl_klassen (id) besteht eine
    Beziehung.

    tbl_klassen
    --------------
    id | klassen
    --------------
    1 | 7. Klasse
    2 | 8. Klasse
    3 | 9. Klasse
    --------------

    tbl_schueler
    ---------------------------------------------
    id | klassen_key | text | eintrag
    ---------------------------------------------
    1 | 2 | bla_a | 2007-02-13 15:47:22
    2 | 1 | bla_b | 2006-12-22 11:23:46
    3 | 2 | bla_c | 2007-05-09 10:17:02
    4 | 3 | bla_d | 2007-04-12 14:05:17
    usw.
    ---------------------------------------------

    Nun würde ich mir gerne jeweils den letzen Eintrag
    aus tbl_schueler (bezogen auf klassen_key) anzeigen lassen:

    bla_c - 09.05.07 - 10:17:02
    bla_d - 12.04.07 - 14:05:17
    bla_b - 22.12.06 - 11:23:46

    Leider bekomme ich mit meiner Abfrage nicht den Eintrag vom
    2007-05-09 10:17:02 (id 3) sondern immer den Eintrag
    vom 2007-02-13 15:47:22 (id 1) angezeigt, obwohl dieser älter ist!

    PHP-Code:
    $query  "SELECT tbl_klassen.id, tbl_klassen.klassen, tbl_schueler.klassen_key tbl_schueler.eintrag, DATE_FORMAT(eintrag, '%d.%m.%y - %H:%i:%s') AS eintrag_new
    FROM tbl_schueler LEFT JOIN tbl_schueler ON (tbl_klassen.id = tbl_schueler.klassen_key)
    GROUP BY tbl_klassen.klassen HAVING CURDATE() >= tbl_schueler.eintrag ORDER BY tbl_klassen.klassen ASC"

    Was mache ich falsch?
     

  2. #2
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo,

    versuchs mal so:
    Code :
    1
    2
    3
    4
    5
    
    SELECT tbl_klassen.id, tbl_klassen.klassen, MAX(tbl_schueler.eintrag) AS eintrag_new
    FROM tbl_schueler INNER JOIN
                          tbl_klassen ON tbl_schueler.klassen_key = tbl_klassen.id
    GROUP BY tbl_klassen.klassen, tbl_klassen.id
    ORDER BY tbl_klassen.klassen
    Da sollte dies rauskommen:
    id klassen eintrag_new
    1 7. Klasse 22.01.2006
    2 8. Klasse 09.05.2007
    3 9. Klasse 12.04.2007
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  3. #3
    leuktra leuktra ist offline Mitglied Silber
    Registriert seit
    Jan 2006
    Beiträge
    52
    Hi Bernd,

    danke für Deine schnelle Rückantwort.

    Drei Sachen habe ich nicht hinbekommen bzw. funktionieren nicht richtig:

    1.) Es wird korrekt das Datum des letzten aktuellen Eintrags ausgegeben, jedoch nicht der
    entsprechende Text dazu, sondern der "alte Text" dazu

    2.) Ich habe es leider auch nicht hinbekommen, daß Datum so formatiert auszugeben:
    tt.mm.jj - hh:mm:ss

    3.) Auch die Ausgabe (Sortierung) nach dem Datum absteigend, bekomme ich nicht hin

    Hilfe wäre nett
     

  4. #4
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo leuktra,

    zu 1.: dein aktueller SQL wäre hilfreich.
    zu 2.: Kann ich dir nicht helfen, da du wohl MySQL benutzt und dies bei MSSQL anders ist.
    zu 3.: Ein ORDER BY MAX(tbl_schueler.eintrag) sollte dies tun.
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  5. #5
    leuktra leuktra ist offline Mitglied Silber
    Registriert seit
    Jan 2006
    Beiträge
    52
    Hi Bernd,

    prima, daß Du geantwortet hast!

    zu 1.)
    PHP-Code:
    SELECT 
    tbl_klassen
    .id
    tbl_klassen.klassen,
    tbl_schueler.text,  

    MAX(tbl_schueler.eintrag) AS eintrag_neu

    FROM tbl_schueler 

    INNER JOIN

    tbl_klassen ON tbl_schueler
    .klassen_key tbl_klassen.id

    GROUP BY tbl_klassen
    .klassentbl_klassen.id

    ORDER BY eintrag_neu DESC 
    zu 2.) Ja, ich benutze Mysql.

    zu 3.) Habe ich schon gelöst.
     

  6. #6
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo,

    zu 2.: Versuch mal DATE_FORMAT(eintrag_neu, '%d.%m.%Y')

    zu 1.: Schau dir das mal an:
    Code :
    1
    2
    3
    4
    5
    
    SELECT     tbl_schueler1.eintrag_new, tbl_schueler1.klassen_key, tbl_schueler1.text, tbl_klassen.Klassen
    FROM         (SELECT     MAX(eintrag) AS eintrag_new, klassen_key, MAX(text) AS text
                           FROM          tbl_schueler
                           GROUP BY klassen_key) AS tbl_schueler1 INNER JOIN
                          tbl_klassen ON tbl_schueler1.klassen_key = tbl_klassen.id
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  7. #7
    leuktra leuktra ist offline Mitglied Silber
    Registriert seit
    Jan 2006
    Beiträge
    52
    Hi Bernd,

    danke für Deine Rückantwort! Auf diese komplexe Abfrage wäre ich nie gekommen

    Leider bin ich erst an diesem WE dazu gekommen, alles auszuprobieren. Es taucht dabei noch folgendes Problem auf:
    Ich habe z.B. zwei Eintrage zu einem "klassen_key". Wenn ich im aktuellen (letzten Eintrag) z.B. eine Korrektur im Feld "text" vornehme, dann wird mir plötzlich der erste (alte Eintrag) als "Aktueller" Eintrag ausgegeben; obwohl ich gar keine Änderung beim Datum (Feld "eintrag") des letzten Eintrags vorgenommen habe!
    Das verstehe ich nicht! Wie kann das passieren? Das Feld "text" hat doch gar nichts mit dem Feld "eintrag" zu tun!
     

  8. #8
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo,

    sorry, war noch ein kleiner Fehler drin, der durch deine Änderung erst in Erscheinung tritt. Leider wird es dadurch noch etwas komlpexer.

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    SELECT     tbl_schueler1.eintrag_new, tbl_schueler1.klassen_key, tbl_schueler1.text, tbl_klassen.Klassen
    FROM         (SELECT     tbl_schueler_1.eintrag_new, tbl_schueler.klassen_key, tbl_schueler.text
                           FROM          tbl_schueler INNER JOIN
                                                      (SELECT     MAX(eintrag) AS eintrag_new, klassen_key
                                                        FROM          tbl_schueler
                                                        GROUP BY klassen_key) tbl_schueler_1 ON tbl_schueler.eintrag = tbl_schueler_1.eintrag_new) tbl_schueler1 INNER JOIN
                          tbl_klassen ON tbl_schueler1.klassen_key = tbl_klassen.id

    So ist es korrekt.
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  9. #9
    leuktra leuktra ist offline Mitglied Silber
    Registriert seit
    Jan 2006
    Beiträge
    52
    Hallo Bernd!

    Super! Spitzenmäßig! Cool! Das funktioniert perfekt! Danke für Deine Hilfe

    Ich hätte noch eine Frage bzw. Idee: gern würde ich in der DB-tbl ein Feld "geaendert" einfügen - also so:

    tbl_schueler
    ----------------------------------------------------------------------------------
    id | klassen_key | text | eintrag | geaendert
    ----------------------------------------------------------------------------------
    1 | 2 | bla_a | 2007-02-13 15:47:22 | 2007-02-14 05:07:12
    2 | 1 | bla_b | 2006-12-22 11:23:46 | 0000-00-00 00:00:00
    3 | 2 | bla_c | 2007-05-09 10:17:02 | 0000-00-00 00:00:00
    4 | 3 | bla_d | 2007-04-12 14:05:17 | 2007-02-15 18:06:32
    usw.
    ----------------------------------------------------------------------------------

    und bei der Abfrage gleichzeitig auch das Änderungsdatum mit einbeziehen, um mir jeweils den letzen Eintrag aus tbl_schueler (bezogen auf klassen_key) anzeigen zu lassen. Das ist sehr kompliziert, oder?

    Gruß
     

  10. #10
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo leuktra,

    wenn du das so meinst?
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    SELECT     tbl_schueler1.eintrag_new, tbl_schueler1.klassen_key, tbl_schueler1.text, tbl_klassen.Klassen, tbl_schueler1.geaendert
    FROM         (SELECT     tbl_schueler_1.eintrag_new, tbl_schueler.klassen_key, tbl_schueler.text, tbl_schueler.geaendert
                           FROM          tbl_schueler INNER JOIN
                                                      (SELECT     MAX(eintrag) AS eintrag_new, klassen_key
                                                        FROM          tbl_schueler
                                                        GROUP BY klassen_key) tbl_schueler_1 ON tbl_schueler.eintrag = tbl_schueler_1.eintrag_new) tbl_schueler1 INNER JOIN
                          tbl_klassen ON tbl_schueler1.klassen_key = tbl_klassen.id
    Das ist sehr kompliziert, oder?
    Nein, wenn man sich länger und/oder intensiv mit SQL beschäftigt, dann nicht mehr.
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  11. #11
    leuktra leuktra ist offline Mitglied Silber
    Registriert seit
    Jan 2006
    Beiträge
    52
    Zitat Zitat von Bernd1984 Beitrag anzeigen
    Hallo,

    sorry, war noch ein kleiner Fehler drin, der durch deine Änderung erst in Erscheinung tritt. Leider wird es dadurch noch etwas komlpexer.

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    SELECT     tbl_schueler1.eintrag_new, tbl_schueler1.klassen_key, tbl_schueler1.text, tbl_klassen.Klassen
    FROM         (SELECT     tbl_schueler_1.eintrag_new, tbl_schueler.klassen_key, tbl_schueler.text
                           FROM          tbl_schueler INNER JOIN
                                                      (SELECT     MAX(eintrag) AS eintrag_new, klassen_key
                                                        FROM          tbl_schueler
                                                        GROUP BY klassen_key) tbl_schueler_1 ON tbl_schueler.eintrag = tbl_schueler_1.eintrag_new) tbl_schueler1 INNER JOIN
                          tbl_klassen ON tbl_schueler1.klassen_key = tbl_klassen.id

    So ist es korrekt.

    Hallo Bernd!

    es gibt folgendes Problem: Die Tabellen- und Spalten müssen mit korrekten mysql Aliase bezeichnet werden; ansonsten läuft das bei meinem Provider nicht!

    Nun habe ich das schon so oft probiert aber es gelingt mir leider nicht

    Wer kann mir helfen?

    Danke!
     

Ähnliche Themen

  1. [mySQL 5] Zu den Monaten Einträge zählen und Monate ohne Einträge auch ausgeben.
    Von FlaverSaver im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 27.09.10, 18:11
  2. Antworten: 4
    Letzter Beitrag: 05.12.05, 21:47
  3. [MySQL] letzte x Datensätze ausgeben
    Von Poweruser im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 08.08.04, 19:47
  4. letzte ID ausgeben
    Von mzeem im Forum PHP
    Antworten: 16
    Letzter Beitrag: 03.11.03, 16:08
  5. PHP | MySQL] Letzte X Datensätze ausgeben
    Von Moritz123 im Forum PHP
    Antworten: 6
    Letzter Beitrag: 01.04.03, 19:35