Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该在这里使用哪个SQL连接?_Php_Sql_Join - Fatal编程技术网

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

Php 我应该在这里使用哪个SQL连接?,php,sql,join,Php,Sql,Join,我有两个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 felh

我有两个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岁之间的结果,但是我如何才能添加男性或女性的东西呢?

选择一些值,比如男性的“M”和女性的“F”。然后:

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'
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')

您必须加入一次年龄筛选,第二次性别筛选

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')
我已将表和列的名称替换为您在问题中描述的名称。 在join中添加type_id,这样会更易于阅读。

如果可能,如果没有性别列,则必须将其添加到表中

你可以用 在您的join中,而不是>和<,您可以作为

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'

您的第二个表输出非常奇怪,同一列如何同时包含性别和年龄信息?是的,正确@BojanKovacevic是您的两个值都插入到同一列中?啊哈,现在我看到类型不同,定义了内容的含义。但是如果你有列“性别和年龄”会不会更好?@BojanKovacevic-我认为他缺少一个列,类型id指的是内容类型你应该放一个键解释哪些表是什么,以帮助OPI使用他在问题中给出的名称。我首先看到了你的解决方案。我试过这个。它实际上正在工作,但是我可以用id列上的用户id来获取它吗。它给了我所有的链接,但是对于id,它给我的不是用户表中的id,而是一些其他行id。我不需要其他表id。是的,我可以。。。非常感谢大家。要仅从用户中选择值,请编写Select user.*。。。看,editI是这样做的,因为我制作了用户表dynmic。我使注册表单和用户表单成为动态的。我可以用这个解决方案更改easyli的形式。