Я создаю сайт знакомств, и у меня возникла проблема с запросом mysql.
Это работает:
SELECT *
FROM `user`
, `desired_partner`
, `user_personality`
WHERE dob BETWEEN '1957-05-18' AND '1988-05-18'
AND country_id = '190'
AND user.gender_id = '1'
AND user.user_id = desired_partner.user_id
AND desired_partner.gender_id = '2'
AND user.user_id = user_personality.user_id
AND user_personality.personality_id = '2'
sql находит любого мужчины (gender_id=1
) с чертой личности ATLEAST 2 (и, возможно, с другими чертами личности) между определенными возрастными диапазонами в США (country_id=190
), которые ищут женщину (gender_id=2
).
Вопрос 1) Как мне сделать так, чтобы он возвращал ТОЛЬКО людей с типом личности 2 и без каких-либо других черт личности?
Найдите в США любого мужчину в возрасте от 22 до 53 лет, имеющего тип личности 2 (только), который ищет женщину.
Вопрос 2) Предположим, я хочу найти человека, который соответствует ТОЛЬКО типу личности 1, типу личности 2 и типу личности 5. В базе данных имеется 14 черт личности, и пользователь может быть связан с любым из них.
Найдите в США любого мужчину в возрасте от 22 до 53 лет с типом личности 1, 2 и 5 (ТОЛЬКО), который ищет женщину.
------- Добавление дополнительной информации:
1) Найдите в США любого мужчину в возрасте от 22 до 53 лет (тип 2), который ищет женщину.
SQL будет использовать эти таблицы:
пользователь
desired_partner
user_personality
Таблица пользователей содержит информацию о профиле, которую мы хотим получить из базы данных (user_id, desc, электронная почта, пароль, dob, sex_id, country_id, state_id, city, ethity_id)
В таблице required_partner указывается, что пользователь ищет в качестве партнера (то есть мужской, женский), первичный ключ - required_partner_id, содержит идентификатор_пользователя и пол_ид
В таблице user_personality первичным ключом является user_personality_id, который содержит user_id и personal_id
Таблица user_personality необходима, потому что идентификатор user_id может быть связан с разными идентификаторами personal_id.
индивидуальный_идентификатор можно использовать для поиска имени_лицы в таблице личностей, как это определено: индивидуальный_идентификатор, имя_личности
Вот проблема:
Что если член имеет тип личности 1 и тип личности 4
Это будет представлено в базе данных как:
таблица user_personality
user_personality_id = 1 user_id = 1 personal_id = 1
user_personality_id = 2 user_id = 1 personal_id = 4
Если бы я хотел найти только людей с типом личности 1, то запрос ниже не сработал бы, поскольку он включал бы user_id = 1, который также имеет тип личности 4.
выберите * от пользователя user_personality, где user.user_id = user_personality.user_id и user_personality.personality_id = 1
Теперь, скажем, участник хочет выполнить поиск человека, у которого есть тип личности 1 и тип личности 5, а другие индивидуальные идентификаторы личности не связаны с его идентификатором пользователя. Как будет выглядеть sql?