Для пояснения сразу приведу пример:
Таблица:
CREATE TABLE `test` (
`A` varchar(255) NOT NULL,
`B` tinyint(1) NOT NULL,
`C` int(11) NOT NULL,
`D` int(11) NOT NULL
);
Данные:
INSERT INTO `test`(`A`, `B`, `C`, `D`) VALUES ("STR1",true,1,1);
INSERT INTO `test`(`A`, `B`, `C`, `D`) VALUES ("STR2",true,2,2);
INSERT INTO `test`(`A`, `B`, `C`, `D`) VALUES ("STR1",true,2,1);
INSERT INTO `test`(`A`, `B`, `C`, `D`) VALUES ("STR3",false,1,2);
INSERT INTO `test`(`A`, `B`, `C`, `D`) VALUES ("STR4",false,2,2);
Запрос имеет 4 переменных A = "STR1", B = true, C = 1, D = 1
В ответе все строки, сортированные в "похожести" на запрос.
"STR1",true,1,1 // полное совпадение
"STR1",true,2,1 // 3 совпадение
"STR2",true,2,2 // 1 совпадение
"STR3",false,1,2 // 1 совпадение
"STR4",false,2,2 // нет совпадений
Моя идея считать совпадения и сортировать по этому значению.
Написать хранимую процедуру сравнения compare(val1, val2), возвращающей число 0 или 1
и складывать их как то так...
compare(A, valA) + compare(B, valB) + compare(B, valB) + compare(D, valD) AS coincidence
Реально ли это сделать ? Есть ещё идеи ?