我有2个SQL表,一个用于用户表,一个用于关于用户的所有事情。 (年龄,性别等)
用户表:
id, username, mail, etc
第二张表
id, user_id, type_id, content
用户表内容:
1, knife, knife@something.com, etc ...
第二张表:
1, 1, 38 (age)
1, 3, Male
我想让20-40岁之间的用户和男性。 我现在在这里:
SELECT
*
FROM
felhasznalok_kieg_adat
JOIN felhasznalok
ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE
felhasznalok_kieg_adat.kieg_id = "22"
and felhasznalok_kieg_adat.tartalom < 21
and felhasznalok_kieg_adat.tartalom < 40
它显示了21到40岁之间的结果,但我怎样才能添加男性或女性的东西?
答案 0 :(得分:2)
你必须加入一次年龄过滤器,第二次加入性别过滤器。
SELECT User.*
FROM User
JOIN UserContent ageFilter
ON ageFilter.user_id = User.id
AND ageFilter.type_id = 1 -- use type_id for joining
JOIN UserContent genderFilter
ON genderFilter.user_id = User.id
AND genderFilter.type_id = 3
WHERE (ageFilter.content < 21 AND ageFilter.content < 40) -- what type is content? You have to make some sort of conversion here!
AND (genderFilter.content = 'Male')
我已根据您在问题中描述的内容替换了表格和列的名称
在联接中添加type_id
,它会以这种方式变得更加可重复。
答案 1 :(得分:0)
SELECT *
FROM felhasznalok_kieg_adat
JOIN felhasznalok ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE ((felhasznalok_kieg_adat.kieg_id = "22"
AND felhasznalok_kieg_adat.tartalom < 21
AND felhasznalok_kieg_adat.tartalom < 40))
AND felhasznalok_kieg_adat.gender = 'male'
答案 2 :(得分:0)
选择一些值,例如男性为“M”,女性为“F”。然后:
ALTER TABLE felhasznalok_kieg_adat ADD COLUMN sex CHAR(1);
您对男性的选择只会如下:
SELECT *
FROM felhasznalok_kieg_adat
JOIN felhasznalok
ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE ((felhasznalok_kieg_adat.kieg_id = "22" and felhasznalok_kieg_adat.tartalom < 21 and felhasznalok_kieg_adat.tartalom < 40)) and (sex = 'M')
答案 3 :(得分:0)
如果您没有性别列,如果可能,您必须将其添加到表格中
您可以使用BETWEEN 在你的加入而不是&gt;和&lt;你可以加入表格
SELECT *
FROM table1
JOIN table2
ON table1.user_id = table2.id
WHERE ((table1.kieg_id = "22" and table1.tartalom BETWEEN 21 AND 22))
AND table1.gender = 'male'