hallo, Hotte,
das kenne ich, guck mal: hier
danke für den Link. Die darin enthaltene Aussage "... nimmt mysql eben einen zufälligen wert der in der jeweiligen gruppierung enthalten ist" klingt nicht nach Systematik.
Da brauche ich also einen neuen Ansatz. Meine Problemstellung:
In einen Veranstaltungskalender geben viele User Termine ein. Ich möchte die 10 zuletzt eingegebenen Veranstaltungen anzeigen, aber pro User nur einen.
Im Klartext: Wenn User 4711 zehn Termine kurz nacheinander eingibt, soll nur sein zuletzt eingegebener angezeigt werden.
An zweiter Stelle der Liste steht der vorletze User mit seinem letzten Termin usw.
Ich hatte das mit einem Subselect gelöst, zwar korrekt, aber schlecht für die Performance:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# DIE LETZTEN 10 NEUERFASSUNGEN
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
trm1.id trm_id
,trm1.titel trm_titel
,trm1.tag trm_tag
,trm1.uhr trm_uhr
,trm1.zeit_neu trm_zeit_neu
,ort1.id ort_id
,ort1.plz ort_plz
,ort1.name ort_name
FROM ( ".$db[0]['termine']." trm1
,".$db[0]['orte']." ort1)
LEFT JOIN (".$db[0]['adressen']." adr1)
ON (adr1.id = trm1.veranstalter_id)
WHERE trm1.owner_id = ".$owner_id."
AND trm1.intern_kz = 0
AND ort1.id = trm1.ort_id
AND trm1.zeit_neu =
(
SELECT
max( trm2.zeit_neu )
FROM ".$db[0]['termine']." trm2
WHERE trm2.veranstalter_id = trm1.veranstalter_id
)
ORDER BY trm1.zeit_neu DESC
LIMIT 0,10
Nun habe ich mit einem schnellen SQL zwar dasselbe Ergebnis, aber eben nur zufällig:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# DIE LETZTEN 10 NEUERFASSUNGEN
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
trm1.id trm_id
,trm1.titel trm_titel
,trm1.tag trm_tag
,trm1.uhr trm_uhr
,min(trm1.zeit_neu) trm_zeit_neu
,ort1.id ort_id
,ort1.plz ort_plz
,ort1.name ort_name
FROM ".$db[0]['termine']." trm1
LEFT JOIN ".$db[0]['orte']." ort1
ON ort1.id = trm1.ort_id
WHERE trm1.owner_id = ".$owner_id."
AND trm1.veranstalter_id > 0
AND trm1.intern_kz = 0
GROUP BY trm1.veranstalter_id
ORDER BY trm1.zeit_neu DESC
LIMIT 0,10
Brauche mal einen Anstoss, stehe im Moment auf dem Schlauch.
Kalle