ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
2561
2561
EMPFEHLEN
-
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!
Was mache ich falsch?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";
-
Hallo,
versuchs mal so:
Da sollte dies rauskommen: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
id klassen eintrag_new
1 7. Klasse 22.01.2006
2 8. Klasse 09.05.2007
3 9. Klasse 12.04.2007Gruss Bernd
Zitat von mAu
-
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
-
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 von mAu
-
Hi Bernd,
prima, daß Du geantwortet hast!
zu 1.)zu 2.) Ja, ich benutze Mysql.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.klassen, tbl_klassen.id
ORDER BY eintrag_neu DESC

zu 3.) Habe ich schon gelöst.
-
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 von mAu
-
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!
-
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 von mAu
-
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ß
-
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
Nein, wenn man sich länger und/oder intensiv mit SQL beschäftigt, dann nicht mehr.Das ist sehr kompliziert, oder?Gruss Bernd
Zitat von mAu
-
Ähnliche Themen
-
[mySQL 5] Zu den Monaten Einträge zählen und Monate ohne Einträge auch ausgeben.
Von FlaverSaver im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 27.09.10, 18:11 -
Letzte Datenbank Änderung ausgeben lassen
Von SaschaW im Forum PHPAntworten: 4Letzter Beitrag: 05.12.05, 21:47 -
[MySQL] letzte x Datensätze ausgeben
Von Poweruser im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 08.08.04, 19:47 -
letzte ID ausgeben
Von mzeem im Forum PHPAntworten: 16Letzter Beitrag: 03.11.03, 16:08 -
PHP | MySQL] Letzte X Datensätze ausgeben
Von Moritz123 im Forum PHPAntworten: 6Letzter Beitrag: 01.04.03, 19:35





Zitieren
Login





