MySQL Möchte die 1. Zeile einer Gruppe
Kalle_B
- datenbank
0 Vinzenz Mai0 steckl0 Kalle_B
Hallöle,
eine Tabelle "termine" ist über eine ort_id mit der Tabelle "orte" verknüpft.
Nun suche ich alle Orte, die mindestens einen Termin haben:
ort termine
--------- ------------
Hamburg 01.04.08
Hamburg 10.04.08
Hamburg 20.04.08
München 05.04.08
Wie kann ich erreichen, dass mir die jeweils 1. Zeile für den Ort zur Verfügung steht? Mit GROUP BY ort kann ich ja nicht mehr auf die Felder von "termine" zugreifen.
Im Moment lese ich innerhalb der while-Schleife für jeden gefundenen Ort den ersten Termin. Das muss doch eleganter gehen.
Lieben Gruß, Kalle
Hallo Kalle,
Nun suche ich alle Orte, die mindestens einen Termin haben:
ort termine
Hamburg 01.04.08
Hamburg 10.04.08
Hamburg 20.04.08
München 05.04.08Wie kann ich erreichen, dass mir die jeweils 1. Zeile für den Ort zur Verfügung steht? Mit GROUP BY ort kann ich ja nicht mehr auf die Felder von "termine" zugreifen.
diese Standardaufgabe löst Du mit einer korrelierten Unterabfrage. Eine kleine Archivsuche nach Postings von Ilja, Rouven, mir oder anderen zu dem Thema sollte ergiebig sein und zum Beispiel dieses Archivposting von mir zu Tage fördern.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
danke dir, meine gestellte Frage konnte ich mit deinem Beispiel lösen:
SELECT
ter1.ort_id
,ter1.tag
,ter1.uhr
,ter1.titel
,ort1.plz
,ort1.name
FROM bia_termine AS ter1
,bia_orte AS ort1
WHERE ter1.owner_id=1
AND ter1.intern_kz=0
AND concat(ter1.tag, ter1.uhr) = ( SELECT min(concat(ter2.tag, ter2.uhr)) FROM bia_termine AS ter2 WHERE ter2.ort_id = ter1.ort_id )
AND ort1.id = ter1.ort_id
ORDER BY ort1.plz, ort1.name
Zusatzfrage:
Wie kann ich einbauen, dass noch die Gesamtzahl der Termine pro Ort ausgegeben wird? Wohin muss der count() ?
MfG Kalle
yo,
1. Tipp
gibt es einen besonderen grund, warum du in der tabelle termin, den tag und die zeit aufgeteilt hast, anstelle wir meistens sinnvoller einfach nur ein attribut mit datum und zeit zu nehmen ?
2. Tipp
benutze explizite JOIN syntax, die schreibweise die du benutzt, ist kaffee von gestern und liest sich um ein vielfaches schlechter.
3. Tipp
ersparr dir die AS Kauseln bei aliasnamen der tabellen.
FROM bia_termine ter1
INNER JOIN bia_orte ort1 ON ort1.id = ter1.ort_id
Wie kann ich einbauen, dass noch die Gesamtzahl der Termine pro Ort ausgegeben wird? Wohin muss der count() ?
der count muss in eine weitere unterabfrage in die SELECT Klausel.
SELECT
ter1.ort_id
,ter1.tag
,ter1.uhr
,ter1.titel
,ort1.plz
,ort1.name,
(hier_unterabfrage_mit_count_in_klammern) Anzahl
FROM .....
Ilja
Hi,
Wie kann ich erreichen, dass mir die jeweils 1. Zeile für den Ort zur Verfügung steht? Mit GROUP BY ort kann ich ja nicht mehr auf die Felder von "termine" zugreifen.
Ist die erste Zeile die mit dem "kleinesten" Termin? Dann müsste dir min() weiterhelfen, wenn mich nicht alles täuscht.
mfG,
steckl
Hi,
Ist die erste Zeile die mit dem "kleinesten" Termin? Dann müsste dir min() weiterhelfen, wenn mich nicht alles täuscht.
Ja, es ist der kleinste Termin, aber ich brauche weitere Angaben zu diesem Termin wie z.B. Thema.
MfG Kalle