JOIN und GROUP auf letzten Datensatz
am 28.11.2007 18:04:19 von Ulf SeltmannHallo,
folgendes Problem stellt sich für mich:
tabelle1:
tabelle1_id|name
-----------+---------
1 |benutzer1
2 |benutzer2
3 |benutzer3
4 |benutzer4
tabelle2:
tabelle2_id|tabelle1_id|kommentar
-----------+-----------+---------
1 |1 |irgendwas
2 |2 |noch was
3 |1 |sonstwas
4 |4 |bei was
5 |2 |habe was
6 |1 |bin was
7 |3 |mach was
8 |4 |tu was
ich hätte gern mit einer Query gelöst, dass ich zu jedem Datensatz der
Tabelle1 den letzten Datensatz der Tabelle2 bekomme. Also sowas wie
tabelle1_id|name |tabelle2_id|kommentar
-----------+----------+-----------+---------
1 |benutzer1 |6 |bin was
2 |benutzer2 |5 |habe was
3 |benutzer3 |7 |mach was
4 |benutzer4 |8 |tu was
derzeit komm ich nur mit einer JOIN-Query mit Nachbehandlung an die
Datensätze:
SELECT tabelle1_id, name, tabelle2_id, kommentar FROM tabelle1
LEFT JOIN tabelle2 USING(tabelle1_id)
ORDER BY tabelle1_id ASC, tabelle2_id DESC
Anschließend gehe ich mit einer Schleife durch und hole mir den letzten
Datensatz zu tabelle1_id. Da ich dadurch aber viele Datensätze hole, die
ich eigentlich nicht brauche, hätte ich das gern in einer Query.
Mit GROUP habe ich es probiert, aber da die Sortierung erst _danach_
passiert, bekomme ich nicht den richtigen Datensatz aus Tabelle2.
Kann mir jemand helfen?
danke und ciao
ulf
P.S.: Wer sich die Mühe machen möchte, das ganze lokal zu testen:
------------------------------------------------------------ ------
CREATE TABLE `tabelle1` (
`tabelle1_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`tabelle1_id`)
) TYPE=MyISAM;
INSERT INTO `tabelle1` (`tabelle1_id`, `name`) VALUES
(1, 'benutzer1'),
(2, 'benutzer2'),
(3, 'benutzer3'),
(4, 'benutzer4');
CREATE TABLE `tabelle2` (
`tabelle2_id` int(11) NOT NULL auto_increment,
`tabelle1_id` int(11) NOT NULL,
`kommentar` varchar(255) NOT NULL,
PRIMARY KEY (`tabelle2_id`)
) TYPE=MyISAM;
INSERT INTO `tabelle2` (`tabelle2_id`, `tabelle1_id`, `kommentar`) VALUES
(1, 1, 'irgendwas'),
(2, 2, 'noch was'),
(3, 1, 'sonstwas'),
(4, 4, 'bei was'),
(5, 2, 'habe was'),
(6, 1, 'bin was'),
(7, 3, 'mach was'),
(8, 4, 'tu was');
------------------------------------------------------------ ------