JOIN und GROUP auf letzten Datensatz

JOIN und GROUP auf letzten Datensatz

am 28.11.2007 18:04:19 von Ulf Seltmann

Hallo,

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');
------------------------------------------------------------ ------

Re: JOIN und GROUP auf letzten Datensatz

am 28.11.2007 18:35:36 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: JOIN und GROUP auf letzten Datensatz

am 29.11.2007 13:36:42 von Kris

Ulf Seltmann wrote:
> ich hätte gern mit einer Query gelöst, dass ich zu jedem Datensatz der
> Tabelle1 den letzten Datensatz der Tabelle2 bekomme.

http://jan.kneschke.de/projects/mysql/groupwise-max

Kris

--
Kristian =?iso-8859-15?q?Köhntopp?=

Re: JOIN und GROUP auf letzten Datensatz

am 29.11.2007 18:04:14 von Ulf Seltmann

Kristian Köhntopp schrieb:
>
> http://jan.kneschke.de/projects/mysql/groupwise-max
>
Wissen ist: wissen wo's steht :)

danke und ciao

ulf