Głowie się już od dłużej chwili nad rozwiązaniem raczej banalnej rzeczy.
Mam następujące tabele:
-- Struktura tabeli dla tabeli `test_grupa_zbiorow` CREATE TABLE `test_grupa_zbiorow` ( `id_grupy` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Zrzut danych tabeli `test_grupa_zbiorow` INSERT INTO `test_grupa_zbiorow` (`id_grupy`) VALUES (1), (2); -- Struktura tabeli dla tabeli `test_zbiory` CREATE TABLE `test_zbiory` ( `zbior_id` int(11) NOT NULL, `grupa` int(11) NOT NULL, `nazwa` varchar(23) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Zrzut danych tabeli `test_zbiory` INSERT INTO `test_zbiory` (`zbior_id`, `grupa`, `nazwa`) VALUES (1, 1, 'zbior1'), (2, 1, 'zbior2'), (3, 1, 'zbior3'), (4, 2, 'zbior4'), (5, 2, 'zbior5'); -- Struktura tabeli dla tabeli `test_elementy` CREATE TABLE `test_elementy` ( `elem_id` int(11) NOT NULL, `zbior` int(11) NOT NULL, `data_dodania` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `nazwa` varchar(32) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Zrzut danych tabeli `test_elementy` INSERT INTO `test_elementy` (`elem_id`, `zbior`, `data_dodania`, `nazwa`) VALUES (1, 1, '2016-02-09 01:07:12', 'elem1'), (2, 1, '2016-02-09 04:12:11', 'elem2'), (3, 1, '2016-02-08 07:00:00', 'elem3'), (4, 2, '2016-02-24 05:00:00', 'elem4'), (5, 2, '2016-02-07 00:13:30', 'elem5'), (6, 3, '2016-02-19 00:00:00', 'elem6'), (7, 3, '2016-02-12 00:00:00', 'elem7'), (8, 3, '2016-02-13 00:00:00', 'elem8');
Jest to grupa zbiorów, jej zbiory i elementy tychże zbiorów.
Chciałbym wyświetlić teraz w jednym wierszu:
- identyfikator zbioru
- najwcześniej dodany element
- najpóźniej dodany element
Zbiór należący do pewnej grupy zbiorów.
Naskrobałem coś w tym rodzaju, ale rzecz jasna nie działa:
SELECT `tz`.`zbior_id` AS `identyfikator zbioru`, `te_m`.`elem_id` AS `najmlodszy element`, `te_s`.`elem_id` AS `najstarszy element` FROM `test_zbiory` `tz` LEFT JOIN (SELECT * FROM `test_elementy` ORDER BY `data_dodania` ASC LIMIT 1) `te_m` ON(`te_m`.`zbior` = `tz`.`zbior_id`) LEFT JOIN (SELECT * FROM `test_elementy` ORDER BY `data_dodania` DESC LIMIT 1) `te_s` ON(`te_s`.`zbior` = `tz`.`zbior_id`) WHERE `tz`.`grupa` = 1 GROUP BY `tz`.`zbior_id`
Otrzymuję taki wynik:
identyfikator zbioru | najmlodszy element | najstarszy element
1 | NULL | NULL
2 | 5 | 4
3 | NULL | NULL
Dlaczego dzieje się cokolwiek w przypadku zbioru nr 2?
W jaki sposób wyświetlić pożądany wynik?