Powiem szczerze, ze szukałem co nieco, ale nie znalazłem nic ciekawego. Nie wiem poza tym, czy się dobrze zrozumieliśmy, więc teraz wrzucam przykładowy schemat bazy danych
CREATE TABLE `answers` (
`a_id` int(11) NOT NULL AUTO_INCREMENT,
`a_id_user` int(11) NOT NULL,
`answer_1` tinyint(4) NOT NULL,
`answer_2` tinyint(4) NOT NULL,
`answer_3` tinyint(4) NOT NULL,
`answer_4` tinyint(4) NOT NULL,
`answer_5` tinyint(4) NOT NULL,
`answer_6` tinyint(4) NOT NULL,
`answer_7` tinyint(4) NOT NULL,
`answer_8` tinyint(4) NOT NULL,
PRIMARY KEY (`a_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
--
-- Zrzut danych tabeli `answers`
--
INSERT INTO `answers` (`a_id`, `a_id_user`, `answer_1`, `answer_2`, `answer_3`, `answer_4`, `answer_5`, `answer_6`, `answer_7`, `answer_8`) VALUES
(1, 1, 1, 2, 3, 4, 3, 2, 1, 1),
(2, 2, 1, 3, 4, 1, 1, 4, 3, 3),
(3, 3, 1, 4, 3, 2, 1, 4, 1, 1),
(4, 4, 2, 3, 4, 3, 2, 1, 1, 1),
(5, 5, 1, 1, 1, 1, 3, 2, 1, 1);
Chciałbym wyświetlić te rekordy, które pola answer_1 ... answer_8 mają jak najbardziej zbliżone do rekordu o danym a_id_user. Patrząc na dane jeśli szukamy rekordów "podobnych" do rekordu użytkownika 1, to użytkownik 2 ma tylko 1 pole podobne (answer_1), użytkownik 3 ma 4 pola podobne (answer_1, answer_3,answer_7,answer_8), użytkownik 4 ma 2 pola podobne (answer_7,answer_8), użytkownik 5 ma 5 pól podobnych (answer_1,answer_5,answer_6,answer_7,answer_8), to chciałbym w rezultacie otrzymać rekordy z danymi (dopasowanie, a_id_user) posortowane względem dopasowania malejąco, czyli w tym przypadku:
5 5
4 3
2 4
1 2
Pytanie - czy jest to wykonalne? Schemat bazy może zostać dowolnie zmieniony, ale powinien zakładać spore obciążenie - w tej przykładowej tabeli rekordów docelowo może być kilkadziesiąt tysięcy