我不知道我的SQL连接有什么问题,这是我第一次使用它

时间:2013-09-01 07:16:52

标签: php mysql sql join inner-join

好的,我有这个代码,我没有错误......我什么都没有......没有什么可以的:

$idea = $bdd->query("SELECT * FROM ideas 
INNER JOIN follow ON ideas.idcreador=follow.idseguidor 
WHERE follow.idseguidor ='".$_SESSION['userid']."' ORDER BY id DESC");

while($datoideaperfil2 = $idea->fetch())
{
  echo $datoideaperfil2['ideas.idcreador'] <br />;
}

有什么问题?请教我第一次使用SQL Joins ...

由于

3 个答案:

答案 0 :(得分:1)

SQL本身似乎没有任何问题,但我怀疑有一件事是你在两个表中都有一个名为id的列。如果你不使用别名,那么mysql将不知道要订购什么并返回错误。

试试这个:

SELECT 
    * 
FROM 
    ideas 
        INNER JOIN follow 
            ON ideas.idcreador=follow.idseguidor 
WHERE 
    follow.idseguidor ='".$_SESSION['userid']."' 
ORDER BY    
    follow.id DESC

答案 1 :(得分:1)

要了解查询的错误,您需要了解SQL中的连接是如何工作的。 JOIN会产生一个“表”,对于表A中的每一行,您将得到一个与表B中的每一行组合的结果行。因此,如果表A有5行,而表B有10行,则得到50( 5x10)行,您需要使用WHERE子句进行过滤。

结果也有所不同,在你的情况下,这是重要的部分,你要去INNER JOIN或OUTER JOIN。 INNER JOIN生成的“表”,仅包含表A和表B中的行与ON子句匹配的行。因此,如果表格构思中有一行,与表格中的任何行无关,则它不会显示在结果中。你会选择一个OUTER JOIN(LEFT或RIGHT OUTER JOIN)来显示任何不匹配的行,但是对于它找不到关系的任何值,行的值将被设置为NULL。

由于您选择了INNER JOIN,并且没有结果,我猜您在任何行之间没有关系。

同样重要的是,您指定要对ORDER BY子句进行排序的表,或者您获得一个不明确的列异常(如果两个表都有一个名为id的列)。

答案 2 :(得分:0)

您使用了INNER JOIN,如果两个表都有相应的行,则只会显示数据。尝试使用LEFTRIGHT加入。