Ich suche schon lange nach der Lösung, finden tu ich sie hoffenltich hier.
Mal die Ausgangssitutation:
Ich hab drei Tabellen:
Tabelle 1 (Einträge)
|id\_eintrag|name|datum|fid\_land|
Tabelle 2 (Länder)
|id\_land|name|stadt|
Tabelle 3 (Kommentare)
|id\_kommentare|kommentar|datum|fid\_eintrag|
In den Feldern ‚fid_land‘ und ‚fid_eintrag‘ stehen die ids zu den einträgen in Tabelle ‚Länder‘ bzw. ‚Einträge‘ (also eine 1:m Verknüpfung)
Ich möchte jetzt EINE Abfrage, die mir den Eintrag mit der id ‚X‘ mit einer Spalte ‚land‘ (hier ist das Feld ‚name‘ aus Tabelle 2) und eine Spalte mit ‚kommentare‘ (hier soll die Anzahl der Kommentare - aus Tabelle 3 - die bei ‚fid_eintrag‘ die id ‚X‘ haben) zurückgibt.
Als Ergebniss erwarte ich in etwa sowas:
|id\_eintrag |name |datum |fid\_land |land |kommentare |
+-----------+----------+---------+---------+--------+-----------+
| 1 |Der Name |1.2.2009 | 2 |Schweiz | 4 |
| 2 |Der Name2 |2.2.2009 | 1 |Schweiz | 2 |
Mein bisheriges Statement sieht so aus:
SELECT eintrag.\*, land.name AS land, COUNT(\*) AS kommentare
FROM eintrag JOIN land ON land.id\_land = eintrag.fid\_land
JOIN kommentare ON kommentare.fid\_eintrag = eintrag.id\_eintrag
GROUP BY kommentare.id\_kommentare
Die Anzahl bei den Kommentaren stimmt aber nicht.
Bitte helft mir und erklärt mir auch, was hier nicht stimmt!
Vielen Dank im Voraus!
Xaver
Hier hab ich mal den SQL DUMP der drei Tabellen:
CREATE TABLE `eintrag` (
`id_eintrag` int(11) NOT NULL auto\_increment,
`name` varchar(250) collate utf8\_unicode\_ci NOT NULL default '',
`datum` date NOT NULL default '0000-00-00',
`fid_land` int(11) NOT NULL default '0',
PRIMARY KEY (`id_eintrag`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8\_unicode\_ci AUTO\_INCREMENT=4 ;
INSERT INTO `eintrag` (`id_eintrag`, `name`, `datum`, `fid_land`) VALUES
(1, 'Hallo 1. Eintrag', '2009-10-12', 1),
(2, 'Hallo Welt noch ein Eintrag', '2009-10-13', 2),
(3, 'Hallo 3. Eintrag', '2009-10-12', 2);
CREATE TABLE `kommentare` (
`id_kommentare` int(11) NOT NULL auto\_increment,
`text` varchar(250) collate utf8\_unicode\_ci NOT NULL default '',
`datum` date NOT NULL default '0000-00-00',
`fid_eintrag` int(11) NOT NULL default '0',
PRIMARY KEY (`id_kommentare`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8\_unicode\_ci AUTO\_INCREMENT=8 ;
INSERT INTO `kommentare` (`id_kommentare`, `text`, `datum`, `fid_eintrag`) VALUES
(1, 'Kommentar 1', '2009-10-12', 1),
(2, 'Kommentar 2', '2009-10-12', 1),
(3, 'Kommentar 3', '2009-10-12', 1),
(4, 'Kommentar 4', '2009-10-12', 2),
(5, 'Kommentar 5', '2009-10-12', 3),
(6, 'Kommentar 6', '2009-10-12', 3),
(7, 'Kommentar 7', '2009-10-12', 3);
CREATE TABLE `land` (
`id_land` int(11) NOT NULL auto\_increment,
`name` varchar(250) collate utf8\_unicode\_ci NOT NULL default '',
`stadt` varchar(200) collate utf8\_unicode\_ci NOT NULL default '',
PRIMARY KEY (`id_land`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8\_unicode\_ci AUTO\_INCREMENT=4 ;
INSERT INTO `land` (`id_land`, `name`, `stadt`) VALUES
(1, 'Ein Land', 'irgendeine stadt'),
(2, 'noch ein Land', 'und nochwas'),
(3, 'Wieder', 'und nochwas');