带有两个不同 where 子句的内/左连接
Posted
技术标签:
【中文标题】带有两个不同 where 子句的内/左连接【英文标题】:Inner/Left join with two different where clauses 【发布时间】:2014-01-02 00:31:10 【问题描述】:我正在两个不同条件下将两个表连接在一起。例如,假设我有以下嵌套查询:
$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的所有元素,这是从修改表中选择的。
我还需要从 wfabilities 中选择所有 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);
【问题讨论】:
我可以发布方案,我会说更准确的答案。 @dimimpou 看看我的半工作代码,它应该解释得更多 好的,我明白了。我会更新 【参考方案1】:见下文:
SELECT ModID,
ID,
Name
FROM modifications M
LEFT JOIN wfabilities WF
ON WF.ModID = M.ID
WHERE TYPE =1 & WFAbility = '0'
【讨论】:
【参考方案2】:要做到这一点,你需要加入你的桌子,我不太确定你想做什么,所以你可能需要给我更多信息,但这是我的猜测。
SELECT ID, Name, ModID
FROM modifications
JOIN wfabilities
ON WFID = ID
WHERE TYPE = '1'
AND WFAbility = '0'
在这个版本中,我在 WFID 等于 ID 时连接表。你必须准确地告诉我什么应该与你的要求挂钩。
要了解有关联接及其作用的更多信息,请查看此页面:mysql Join
编辑:
查看你的大结构后,我可以看到你可以这样做:
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'
此查询将从战甲名称中为您获取一个能力名称数组。
【讨论】:
看看我的半工作代码,它应该解释得更多【参考方案3】:这是查询:
"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 = ?"
【讨论】:
以上是关于带有两个不同 where 子句的内/左连接的主要内容,如果未能解决你的问题,请参考以下文章