abfrage der aktuellesten artikel
hallo,
ich habe da folgendes kleines problem:
ich habe eine tabelle in meiner datenbank, dort drin sind artikel, die zum einen den schlüssel "artikelID" haben und zum anderen den schlüssel "datum".
artikelID ist allerdings nicht einmalig, sondern aknn durchaus mehrfach, mit verschiedenen datumswerten vorkommen.
jetzt möchte ich die daten wie folgt auslesen:
-alle umgekert sortiert nach datum, so dass ich die aktuellesten auslese. dabei soll aber auch jeweils immer nur der aktuelleste artikel mit dem wert artikelID ausgelsesen werden, quasi immer die aktuelleste version.
dabei ahbe ich schon folgendes versucht:
das problem hierbei ist aber, wie mysql diese abfrage abarbeitet, das liest nämlich immer zuerst alle zeilen mit artikelID aus, egal welche reihenfolge die zuerst haben, dann werden die ersten vorkommen einmalig ausgelesen, dann 5 werte genommen und nach datum sortiert .. somit bekomm ich aber nicht die tatsächlichen, aktuellsten werte.
kann mir da irgendwer weiterhelfen, und hab ich das verständlich genug rübergebracht? lässt sich nämlich schwer erklären, wenn man die eigentlichen ergebnisse nciht vor sich hat.
kurz, wenn cih nachträglich zu einer bestehenden ID einen eintrag erstelle, wird der nicht ganz oben angeführt, weil nach der reihenfolge des erstellens, die erste version des artikels einmalig ausgelesen wird, aber eben nicht die neuste.
ich habe da folgendes kleines problem:
ich habe eine tabelle in meiner datenbank, dort drin sind artikel, die zum einen den schlüssel "artikelID" haben und zum anderen den schlüssel "datum".
artikelID ist allerdings nicht einmalig, sondern aknn durchaus mehrfach, mit verschiedenen datumswerten vorkommen.
jetzt möchte ich die daten wie folgt auslesen:
-alle umgekert sortiert nach datum, so dass ich die aktuellesten auslese. dabei soll aber auch jeweils immer nur der aktuelleste artikel mit dem wert artikelID ausgelsesen werden, quasi immer die aktuelleste version.
dabei ahbe ich schon folgendes versucht:
|
|
Quellcode |
1 |
SELECT DISTINCT(artikelID) FROM tabelle ORDER BY date DESC LIMIT 5 |
das problem hierbei ist aber, wie mysql diese abfrage abarbeitet, das liest nämlich immer zuerst alle zeilen mit artikelID aus, egal welche reihenfolge die zuerst haben, dann werden die ersten vorkommen einmalig ausgelesen, dann 5 werte genommen und nach datum sortiert .. somit bekomm ich aber nicht die tatsächlichen, aktuellsten werte.
kann mir da irgendwer weiterhelfen, und hab ich das verständlich genug rübergebracht? lässt sich nämlich schwer erklären, wenn man die eigentlichen ergebnisse nciht vor sich hat.
kurz, wenn cih nachträglich zu einer bestehenden ID einen eintrag erstelle, wird der nicht ganz oben angeführt, weil nach der reihenfolge des erstellens, die erste version des artikels einmalig ausgelesen wird, aber eben nicht die neuste.
Auf jede Frage gibt es eine Antwort, man muss nur lange genug danach suchen.
z.B. auf www.netscripter.de :-P
also wenn das größte datum das neuste ist, mach es doch so:
|
|
Quellcode |
1 |
SELECT MAX(artikelID) FROM tabelle GROUPE BY date ORDER BY date DESC LIMIT 5 |
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
ähm .. da habe ich zwar dann tatsächlich die aktuellsten artikel ganz oben, das problem ist aber, dass wieder doppelte artikelIDs ausgelesen werden ... und es soll aj jede artikelID nur einmalig im ergebnis vorkommen ....
Auf jede Frage gibt es eine Antwort, man muss nur lange genug danach suchen.
z.B. auf www.netscripter.de :-P
und wenn du es nach artikelID gruppierst?
jperl
|
|
Quellcode |
1 |
SELECT MAX(artikelID) FROM tabelle GROUP BY artikelID ORDER BY date DESC LIMIT 5 |
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »jperl« (1. Januar 2006, 18:49)
... dann ist wieder alles nicht danach soriert, ob es von einem artikel eine aktuellere variante gibt ... das ist dann einfach eine umgekerte sortierung der artikelIDs, die es gibt ... also z.b.
9
8
7
6
5
aber das wilol ich ja nicht .. mein ziel ist es, dass wenn ich z.b. von artikel 5 eine neue version erstelle, also eine neue zeile zwar wieder mit artikelID=5 erstellt wird, aber eben ein aktuelleren timestamp bekommt, dass das ergebnis dann so aussieht:
5
9
8
7
6
9
8
7
6
5
aber das wilol ich ja nicht .. mein ziel ist es, dass wenn ich z.b. von artikel 5 eine neue version erstelle, also eine neue zeile zwar wieder mit artikelID=5 erstellt wird, aber eben ein aktuelleren timestamp bekommt, dass das ergebnis dann so aussieht:
5
9
8
7
6
Auf jede Frage gibt es eine Antwort, man muss nur lange genug danach suchen.
z.B. auf www.netscripter.de :-P
so einen versuch mach ich noch 
wieso eigentlich das max()?
wahrscheinlich denke ich gerade total falsch. aber einen versuch ists wert.
soweit ich weiß gibt es bei sql "SELECT DISTINCT ON" für solche fälle. glaub aber nicht, dass es das bei mysql gibt.
jperl
#edit
ok ein versuch noch. wenn du ein alias fürs datum erzeugst vl gehts dann.
hab aber keine ahnung ob das in kombination mit group by probs gibt. hoffe aber, dass es funzt.
jperl

wieso eigentlich das max()?
wahrscheinlich denke ich gerade total falsch. aber einen versuch ists wert.
|
|
Quellcode |
1 |
SELECT artikelID FROM tabelle GROUP BY artikelID ORDER BY date DESC LIMIT 5 |
soweit ich weiß gibt es bei sql "SELECT DISTINCT ON" für solche fälle. glaub aber nicht, dass es das bei mysql gibt.
jperl
#edit
ok ein versuch noch. wenn du ein alias fürs datum erzeugst vl gehts dann.
|
|
Quellcode |
1 |
SELECT artikelID, MAX(date) AS mdate FROM tabelle GROUP BY artikelID ORDER BY mdate DESC LIMIT 5 |
hab aber keine ahnung ob das in kombination mit group by probs gibt. hoffe aber, dass es funzt.

jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »jperl« (1. Januar 2006, 19:00)
JA, genau, die 2te variante wars, funktioniert genau so, wie ich's wollte .... *freu*
vielen, vielen dank, jperl ... ahb da schon ewig dran rumprobiert ... anscheinend aber immer mit dem falschen ansatz.
vielen, vielen dank, jperl ... ahb da schon ewig dran rumprobiert ... anscheinend aber immer mit dem falschen ansatz.
Auf jede Frage gibt es eine Antwort, man muss nur lange genug danach suchen.
z.B. auf www.netscripter.de :-P
keine ursache, freut mich geholfen zu haben.
hatte auch schon mal das prob und jetzt ist mir wieder eingefallen, wie ichs gelöst habe.
hab aber vorher auch ein bisschen rumgewurschtelt.
jperl
hatte auch schon mal das prob und jetzt ist mir wieder eingefallen, wie ichs gelöst habe.

hab aber vorher auch ein bisschen rumgewurschtelt.
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.


