我应该在这里使用哪个SQL连接?

时间:2013-04-22 12:42:50

标签: php sql join

我有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岁之间的结果,但我怎样才能添加男性或女性的东西?

4 个答案:

答案 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'