如何在SQL和PHP中正确使用WHERE with JOIN
因此,我试图在PHP中实现一个JOIN,但我不知道如何在查询中包含带有JOIN的WHERE子句 我正在努力做到:如何在SQL和PHP中正确使用WHERE with JOIN,php,mysql,Php,Mysql,因此,我试图在PHP中实现一个JOIN,但我不知道如何在查询中包含带有JOIN的WHERE子句 我正在努力做到: SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located FROM SpecialFacts INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.Sp
SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located
FROM SpecialFacts
INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID
WHERE SpeciesID="G. cuvier"
基本上,我试图确保连接发生在SpeciesID为G.cuvier的表上,但到目前为止我尝试的一切都不起作用,它现在给我的错误是“where子句中的Column SpeciesID不明确”
以下是我的相关PHP代码:
<?php
include 'connect.php';
$result = mysqli_query($connect,"SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located FROM SpecialFacts INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID WHERE SpeciesID='G. cuvier'") or die("fail" . mysqli_error($connect));
$i = 0;
while($row = mysqli_fetch_array($result))
{
echo $row[$i];
$i = $i + 1;
}
两个表中都存在
列SpeciesID
,因此它不知道需要将哪个值与作为G.cuvier
给出的值进行比较。当您用点(.)将每个列名作为表名写入时,where条件columnSpecialFacts.SpeciesID=“G.cuvier”
中也应如此
所以查询应该是这样的:
SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located
FROM SpecialFacts
INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID
WHERE SpecialFacts.SpeciesID="G. cuvier"
两个表中都存在列SpeciesID
,因此它不知道需要将哪个值与作为G.cuvier
给出的值进行比较。当您用点(.)将每个列名作为表名写入时,where条件columnSpecialFacts.SpeciesID=“G.cuvier”
中也应如此
所以查询应该是这样的:
SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located
FROM SpecialFacts
INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID
WHERE SpecialFacts.SpeciesID="G. cuvier"
它不会因为您错误地使用了WHERE
而给您该错误。它会给你这个错误,因为在你的查询中有多个表有一个同名的列,因此“不明确”。您只需要通过将表名添加到标识符来消除歧义
WHERE SpecialFacts.SpeciesID="G. cuvier"
或
由于您正在对该列上的表进行内部联接,因此任何一个表都应该适用于WHERE子句。出于性能原因,我建议使用较小的表,但老实说,我不能100%确定这是否重要。您可以对每一个进行解释
,以查看它们之间的比较。它不会给您该错误,因为您在中使用了不正确的。它会给你这个错误,因为在你的查询中有多个表有一个同名的列,因此“不明确”。您只需要通过将表名添加到标识符来消除歧义
WHERE SpecialFacts.SpeciesID="G. cuvier"
或
由于您正在对该列上的表进行内部联接,因此任何一个表都应该适用于WHERE子句。出于性能原因,我建议使用较小的表,但老实说,我不能100%确定这是否重要。您可以对每一项进行解释,查看它们的比较情况。使用下面的查询
SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located
FROM SpecialFacts INNER JOIN Habitat
ON SpecialFacts.SpeciesID=Habitat.SpeciesID
WHERE SpecialFacts.SpeciesID='G. cuvier'
我使用了单引号,并将列名与表名一起使用。使用下面的查询
SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located
FROM SpecialFacts INNER JOIN Habitat
ON SpecialFacts.SpeciesID=Habitat.SpeciesID
WHERE SpecialFacts.SpeciesID='G. cuvier'
我使用了单引号,并将列名与表名一起使用