Php 使用两个不同的where子句进行内部/左侧联接

Php 使用两个不同的where子句进行内部/左侧联接,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我正在两种不同条件下将两个表连接在一起。例如,假设我有以下嵌套查询: $Query = $DB->prepare("SELECT ID, Name FROM modifications WHERE TYPE =1 & WFAbility = '0'"); $Query->execute(); $Query->bind_result($Mod_ID,$Mod_Name); 此查询: $Query= $DB->prepare("SELECT `ModID` fro

我正在两种不同条件下将两个表连接在一起。例如,假设我有以下嵌套查询:

$Query = $DB->prepare("SELECT ID, Name FROM modifications
WHERE TYPE =1 & WFAbility = '0'");
$Query->execute();
$Query->bind_result($Mod_ID,$Mod_Name); 
此查询:

$Query= $DB->prepare("SELECT `ModID` from `wfabilities` WHERE `WFID`=?");
$Query->bind_param();
$Query->execute();
$Query->bind_result();
while ($Query->fetch()){  }
基本上,我想选择类型等于1,能力等于0的所有元素,这是从修改表中选择的

我还需要从wfiabilities中选择所有id,但将它们转换为位于修改中的名称,其中WFID等于另一个查询的结果

这是我目前的半工作代码

$Get_ID = $DB->prepare("SELECT ID FROM warframes WHERE Name=?");
        $Get_ID->bind_param('s',$_GET['Frame']);
        $Get_ID->execute();
        $Get_ID->bind_result($FrameID);
        $Get_ID->fetch();
        $Get_ID->close();
            echo $FrameID;
            $WF_Abilties = $DB->prepare("SELECT ModID FROM `wfabilities` WHERE WFID=?");
            $WF_Abilties->bind_param('i',$FrameID);
            $WF_Abilties->execute();
            $WF_Abilties->bind_result($ModID);
                $Mod_IDArr = array();
            while ($WF_Abilties->fetch()){
                $Mod_IDArr[] = $ModID;
            }
            print_r($Mod_IDArr);
                $Ability_Name = array();
                foreach ($Mod_IDArr AS $AbilityMods){
                    $WF_AbName = $DB->prepare("SELECT `Name` FROM `modifications` WHERE ID=?");
                    $WF_AbName->bind_param('i',$AbilityMods);
                    $WF_AbName->execute();
                    $WF_AbName->bind_result($Mod_Name);
                    $WF_AbName->fetch();
                        $Ability_Name[] = $Mod_Name;
                }
            print_r($Ability_Name);
以下是查询:

"SELECT A.ID, A.Name,B.ModID,C.Name
FROM modifications as A 
LEFT JOIN wfabilities as B ON A.ID = B.WFID 
LEFT JOIN warframes as C ON C.ID = B.WFID 
WHERE A.TYPE =1 AND A.WFAbility = '0' AND C.Name = ?"
见下文:

SELECT ModID, 
     ID,
     Name
FROM modifications M    
LEFT JOIN wfabilities WF
    ON WF.ModID = M.ID
WHERE TYPE =1 & WFAbility = '0'

要做到这一点,你需要加入你的表,我不太确定你想做什么,所以你可能必须给我更多的信息,但这里是我的猜测

SELECT ID, Name, ModID 
FROM modifications
JOIN wfabilities 
  ON WFID = ID
WHERE TYPE = '1' 
  AND WFAbility = '0'
在这个版本中,当WFID等于if ID时,我连接表。您必须准确地告诉我您的需求中应该挂接什么

要了解有关联接及其作用的更多信息,请查看此页面:

编辑:

在查看您的更大结构后,我可以看到您可以这样做:

SELECT modifications.Name FROM modifications
JOIN wfabilities on wfabilities.ModID = modifications.ID
JOIN warframes on warframes.ID = wfabilities.WFID
WHERE warframes.Name = 'the name you want'

此查询将从warframes名称中获取一组能力名称。

如果您可以发布方案,我会给出更准确的答案。@dimimpou看一看我的半工作代码,它应该会解释得更多一些好的,现在我明白了。我将更新我的半工作代码,它应该会解释得更多