Mam pewien problem - nie mogę sobie poradzić z zapytaniem, które by wybierało dane na takiej zasadzie:
tabela votes:
-- -- Struktura tabeli dla `votes` -- CREATE TABLE IF NOT EXISTS `votes` ( `vote_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `survey_id` smallint(5) UNSIGNED NOT NULL, `question_id` int(10) UNSIGNED NOT NULL, `answer` varchar(20) COLLATE utf8_polish_ci NOT NULL, `IP` varchar(128) COLLATE utf8_polish_ci NOT NULL, `vote_time` datetime NOT NULL, PRIMARY KEY (`vote_id`), KEY `survey_id` (`survey_id`,`question_id`), KEY `question_id` (`question_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=77 ; -- -- Zrzut danych tabeli `votes` -- INSERT INTO `votes` (`vote_id`, `survey_id`, `question_id`, `answer`, `IP`, `vote_time`) VALUES (56, 44, 92, '3', '127.0.0.1', '2011-02-19 13:34:50'), (57, 44, 93, '3', '127.0.0.1', '2011-02-19 13:34:50'), (58, 44, 94, '6', '127.0.0.1', '2011-02-19 13:34:50'), (59, 44, 95, '2', '127.0.0.1', '2011-02-19 13:34:50'), (60, 44, 96, '9', '127.0.0.1', '2011-02-19 13:34:50'), (61, 44, 92, '3', '127.0.0.1', '2011-02-19 13:34:55'), (62, 44, 93, '3', '127.0.0.1', '2011-02-19 13:34:55'), (63, 44, 94, '6', '127.0.0.1', '2011-02-19 13:34:55'), (64, 44, 95, '2', '127.0.0.1', '2011-02-19 13:34:55'), (65, 44, 96, '9', '127.0.0.1', '2011-02-19 13:34:55'), (66, 44, 92, '3', '127.0.0.1', '2011-02-19 13:38:14'), (67, 44, 93, '3', '127.0.0.1', '2011-02-19 13:38:14'), (68, 44, 94, '6', '127.0.0.1', '2011-02-19 13:38:14'), (69, 44, 95, '2', '127.0.0.1', '2011-02-19 13:38:14'), (70, 44, 96, '9', '127.0.0.1', '2011-02-19 13:38:14'), (71, 44, 92, '1', '127.0.0.1', '2011-02-20 11:24:04'), (72, 44, 93, '3', '127.0.0.1', '2011-02-20 11:24:04'), (73, 44, 94, '3,4,5,6', '127.0.0.1', '2011-02-20 11:24:04'), (74, 44, 95, '2', '127.0.0.1', '2011-02-20 11:24:04'), (75, 44, 96, '5', '127.0.0.1', '2011-02-20 11:24:04'), (76, 43, 91, '1,3', '127.0.0.1', '2011-02-20 11:37:06'); -- -- Ograniczenia dla zrzutów tabel -- -- -- Ograniczenia dla tabeli `votes` -- ALTER TABLE `votes` ADD CONSTRAINT `votes_ibfk_1` FOREIGN KEY (`survey_id`) REFERENCES `surveys` (`survey_id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `votes_ibfk_2` FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE ON UPDATE CASCADE;
tabela surveys:
-- -- Struktura tabeli dla `surveys` -- CREATE TABLE IF NOT EXISTS `surveys` ( `survey_id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, `survey_title` varchar(250) COLLATE utf8_polish_ci NOT NULL, `survey_desc` text COLLATE utf8_polish_ci, `user_id` tinyint(3) UNSIGNED NOT NULL COMMENT 'id uzytkownika, ktory dodal ankiete', `add_date` datetime NOT NULL, `mod_date` datetime DEFAULT NULL, `exp_date` datetime DEFAULT NULL, `visible` tinyint(1) NOT NULL, PRIMARY KEY (`survey_id`), KEY `id_autora` (`user_id`), KEY `data_dodania` (`add_date`), KEY `survey_id` (`survey_id`), KEY `survey_id_2` (`survey_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=45 ; -- -- Zrzut danych tabeli `surveys` -- INSERT INTO `surveys` (`survey_id`, `survey_title`, `survey_desc`, `user_id`, `add_date`, `mod_date`, `exp_date`, `visible`) VALUES (43, 'Jaką porę roku lubisz najbardziej?', 'Badanie dotyczące ulubionej pory roku ankietowanych.', 1, '2011-02-12 13:21:08', '2011-02-12 13:21:08', '2011-02-28 20:00:00', 1), (44, 'Ulubione kolory.', 'Kilka pytań odnośnie ulubionych kolorów.', 1, '2011-02-12 14:32:20', '2011-02-12 14:32:20', '2011-02-25 12:00:00', 1); -- -- Ograniczenia dla zrzutów tabel --
Pożądany wynik:
Chcę uzyskać tabelę, która będzie zawierać 2 kolumny:
- tytuły wszystkich ankiet (survey_title)
- zliczoną ilość unikalnych głosów na daną ankietę (unikalnych = takich, które mają jednakowy votes.vote_time)
Dla SQL'a powyżej tabela taka powinna wyglądać tak:
survey_title | votes
Ulubione kolor. | 4
Jaką porę roku.. | 1
Próbowałem na różne sposoby, ale jedyne, co mi się udało osiągnąć, to jest rekord, który zliczał te powtórzenia dobrze, no ale właśnie był to tylko jeden rekord, a ja chcę uzyskać wszystkie rekordy i county dla każdego tytułu ankiety.
Czy może mi ktoś pomóc? Będę bardzo wdzięczny.