Задавайте вопросы, мы ответим
Вы не зашли.
Привет, Друзья.
Задача такая. Есть таблица users с анкетами людей.
userID
name (имя)
sex (м,ж)
color (Цвет волос enum 'Светлые','Черные')
lang (знание языков enum 'Английский','Испанский')
user_compareID (фильтр)
1 | Марина | ж | Светлые | Английский | 1
2 | Алекс | м | Черные | Испанский | NULL
3 | Дима | м | Светлые | Английский | NULL
4 | Стас | м | Светлые | Испанский | NULL
Нужно придумать систему для подбора анкет между собой
Создаем другую таблицу users_compare в которой будем хранить фильтры
user_compareID
param (параметр, например пол или цвет волос, т.е. color или lang)
value (значение параметра)
priority (важность параметра)
1 | sex | м | 1
1 | color | Светлые | 0.5
1 | lang | Испанский | 0.2
(т.е. Марина ищет только парня со светлыми волосами и было бы неплохо, чтобы он еще знал испанский)
Результатом должно быть
4 | Стас | м | Светлые | Испанский | NULL (relev=1+0.5+0.2 = 1,7)
3 | Дима | м | Светлые | Английский | NULL (relev=1+0,5+0 = 1,5)
2 | Алекс | м | Черные | Испанский | NULL (relev=1+0+0.2 = 1,2)
Как написать запрос для вывода анкет по степени соответствия ?
Отредактированно Microname (24.07.2010 13:13:25)
Неактивен
Обязательные условия должны быть в WHERE, условия с важностью
менее единицы должны быть в ORDER:
ORDER BY (IF(color = 'light, 0.5, 0) + IF(lang='spanish', 0.2, 0)) DESC;
Разумеется, можно придумывать более сложную функцию (например,
произведение или какой-то полином — только воображение подскажет ).
Неактивен