Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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
如何在SQL和PHP中正确使用WHERE with JOIN_Php_Mysql - Fatal编程技术网

如何在SQL和PHP中正确使用WHERE with JOIN

如何在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

因此,我试图在PHP中实现一个JOIN,但我不知道如何在查询中包含带有JOIN的WHERE子句

我正在努力做到:

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条件column
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"

两个表中都存在列
SpeciesID
,因此它不知道需要将哪个值与作为
G.cuvier
给出的值进行比较。当您用点(.)将每个列名作为表名写入时,where条件column
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"

它不会因为您错误地使用了
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'
我使用了单引号,并将列名与表名一起使用