我正在组建一个约会网站,但遇到了 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 查找美国 (country_id=190
) 特定年龄范围内具有至少人格特质 2(以及可能的其他人格特质)的任何男性 (gender_id=1
) ) 寻找女性 (gender_id=2
)。
问题 1) 如何使其仅返回具有 2 类人格特征而没有其他人格特征的人?
Find any man in the USA that is between 22 and 53 that is of personality type 2 (only) that is looking for a woman.
问题 2) 假设我想找到仅匹配性格类型 1、性格类型 2 和性格类型 5 的人。数据库中有 14 种性格特征,用户可以与其中任何一种性格特征相关联。
Find any man in the USA that is between 22 and 53 that is of personality type 1, 2, and 5 (ONLY) that is looking for a woman.
--------添加更多信息:
1) 在美国寻找任何年龄在 22 到 53 岁之间(仅限性格类型 2)的男性,并且正在寻找女性。
sql 将使用这些表:
用户 期望的合作伙伴 用户个性
用户表包含我们要从数据库中获取的个人资料信息(user_id、desc、电子邮件、密码、dob、gender_id、country_id、state_id、city、ethnicity_id)
在desired_partner表中告诉我们用户正在寻找什么伴侣(即男性、女性),主键是desired_partner_id,并包含user_id和gender_id
在user_personality表中,主键是user_personality_id,包含user_id和personality_id
需要user_personality表,因为一个user_id可以与不同的personality_id关联。
personality_id可用于在personality表中查找personality_name,定义为:personality_id,personality_name
问题是这样的:
如果成员具有性格类型 1 和性格类型 4 该怎么办
这将在数据库中表示为:
用户个性表 用户个性 ID = 1 用户个性 ID = 1 个性 ID = 1 user_personality_id = 2 user_id = 1personality_id = 4
如果我想查找性格类型为 1 的人,那么下面的查询将不起作用,因为它将包含同时具有性格类型 4 的 user_id = 1。
从用户、user_personality中选择*,其中user.user_id = user_personality.user_id且user_personality.personality_id = 1
现在,假设一名成员想要搜索具有个性类型 1 和个性类型 5 且没有其他与他们的 user_id 关联的个性 ID 的男士。 sql 会是什么样子?
最佳答案
第一个问题:
您确定您的原始查询还返回其他个性类型吗?因为您明确要求类型 2
。
我看不出这应该如何返回其他人格。 (所以这已经是您第一个问题的答案)。
第二个问题:
使用IN
运算符:
AND user_personality.personality_id IN ('1', '2', '5')
<小时/>
如果这没有帮助,您应该更好地解释您的表结构,以便我们知道它们之间存在什么样的关系。
关于MYSQL select查询,同一列必须存在多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864213/