Как сделать выборку доступных значений по параметру?
Здравствуйте, помогите, пожалуйста, составить MySQL запрос (хотя, думаю, одним запросом здесь не обойдется).
Суть - возможность выставления пользователем своего отношения к другому пользователю (как вконтакте - выбор второй половинки, братьев, сестер и т.д.)
Есть две таблицы: relations_types:
id
title
sex - важность пола второго пользователя (например, для позиции "второй половинки" или брата (странно, если брат будет женского пола) принимает значения: 0 - все равно, 1 - мужской, 2 - женский, 3 - зависит от пола самого пользователя (т.е. если женский - то параметр становится мужского пола и наоборот)
is_multiple - возможность множественного выбора, т.е., например, несколько братьев/сестер
relations:
id
type_id - id в relations_types
user_id_from - от кого выбор отношения
user_id_to - какому пользователю
approved - принял ли user_id_to отношение
Нужно вывести список доступных типов отношений из таблицы relations_types так, чтобы соблюдался пол пользователя (т.е. для пользователя женского пола не вывелся тип отношения "брат" и т.д.; для второй половинки нельзя было выбрать пользователя того же пола); так же записи с типом отношения не было в таблице relations (хотя это необязательное условие; приоритетнее первое). Заранее спасибо.
P.S. Пардон, если вопрос задан коряво.
Ольга: А можно еще уточнить какой результат ожидаете? А то непонятно что вы делаете, форму где идет заполнение или страницу пользователя где перечисляете кто есть кто. А может отдельная страница где список пользователей и их контакты.
Артем | Брат
Алена | Сестра
Денис | Друг
Мне кажется вы перемудрили.
Есть таблица пользователей
id 1 - Маша
id 2 - Петя
id 3 - Ваня
Есть коды отношений
1 - дружба
2 - любовь
3 - родственные отношения
4 - ненависть
Делаем таблицу отношений id первого человека / id второго человека / отношение
1 / 2 / 2 - (Маша любит Петю)
3 / 1 / 2 - (Ваня любит Машу)
3 / 2 / 4 - (Ваня ненавидит Петю)
Для правильного вопроса надо знать половину ответа
SELECT DISTINCT `rt`.`id`, `rt`.`title`, `rt`.`sex`
FROM `relation_types` AS `rt`
LEFT JOIN (SELECT `type_id` FROM `relations` WHERE `user_id_from` = :user_id) AS `r`
ON `r`.`type_id` = `rt`.`id`
WHERE (`rt`.`is_multiply` = TRUE OR `r`.`type_id` IS NULL)
AND (`rt`.`sex` = 0 OR `rt`.`sex` = :second_user_sex
OR (`rt`.`sex` = 3 AND :user_sex != :second_user_sex))