Ich habe die folgende MySQL-Struktur (viel minimiert):Fehlende SQL-Einträge bei der Kombination von LEFT/INNEN + GROUP JOIN BY
CREATE TABLE `site_movies` (
`id` int(10),
`title` varchar(90),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
INSERT INTO `site_movies` VALUES(1, 'Borrowers, The');
INSERT INTO `site_movies` VALUES(2, 'Louis C.K.: Chewed Up');
INSERT INTO `site_movies` VALUES(3, 'Louis C.K.: Shameless');
INSERT INTO `site_movies` VALUES(4, 'Vinni-Pukh');
CREATE TABLE `site_movies_directors` (
`id` mediumint(8),
`name` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
CREATE TABLE `site_movies_directors_connections` (
`movie_id` mediumint(8),
`director_id` mediumint(8)
) ENGINE=MyISAM;
CREATE TABLE `site_movies_seen` (
`object_id` int(10),
`date` varchar(10),
`rating` tinyint(2)
) ENGINE=MyISAM;
INSERT INTO `site_movies_seen` VALUES(1, '0', 4);
INSERT INTO `site_movies_seen` VALUES(2, '1293821757', 5);
INSERT INTO `site_movies_seen` VALUES(3, '1293821758', 7);
INSERT INTO `site_movies_seen` VALUES(4, '0', 6);
Und dann die folgende Abfrage (auch viel minimiert):
SELECT m.title, s.date
FROM site_movies_seen s
INNER JOIN site_movies m ON s.object_id = m.id
LEFT JOIN site_movies_directors_connections AS mdc ON (m.id = mdc.movie_id)
GROUP BY mdc.movie_id, s.date
ORDER BY s.date ASC
Drucke:
title date
Borrowers, The 0
Louis C.K.: Chewed Up 1293821757
Louis C.K.: Shameless 1293821758
Beachten sie, dass "Vinni-Pukh" fehlt, weil es der zweite Eintrag in der _seen Tabelle mit Datum ist = 0. Wie kann ich alle Ganzzahlen einschließen, auch wenn mehrere Ganzzahlen den gleichen Zeitstempel haben?
Danke, Mark! Das Ändern von mdc.movie_id in m.id hat den Trick gemacht. Was die Director-Sachen angeht, ist das nur eine Folge von etwas zu minimiertem Code von mir ;-) – EspenA