好的,我有这个代码,我没有错误。。。。我什么都没有。。。。什么都没有:
$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。。。
感谢
SQL本身似乎没有任何问题,但有一点我确实怀疑,您在两个表中都有一个名为id
的列。如果您不使用别名,那么mysql将不知道按照什么进行订购并返回错误。
试试这个:
SELECT
*
FROM
ideas
INNER JOIN follow
ON ideas.idcreador=follow.idseguidor
WHERE
follow.idseguidor ='".$_SESSION['userid']."'
ORDER BY
follow.id DESC
要了解查询的问题,您需要了解SQL中的联接是如何工作的。JOIN产生一个"表",对于表A中的每一行,都会得到一个与表B中的每行组合的结果行。因此,如果表A有5行,表B有10行,则会得到50(5x10)行,需要使用where子句进行筛选。
结果也不同,在您的情况下,这是重要的部分,无论您是选择INNER JOIN还是OUTER JOIN。INNER JOIN的结果"表"ONLY包含表A和表B中的行与ON子句匹配的行。所以,如果您在表思想中有一行,它和follow表中的任何行都没有关系,它就不会显示在结果中。您是否选择OUTER JOIN(LEFT或RIGHT OUTER JOIN)?任何不匹配的行都会显示,但对于找不到关系的任何值,该行的值都将设置为NULL。
由于您选择了INNER JOIN,但没有得到任何结果,我猜您在任何行之间都没有关系。
同样重要的是,您要指定ORDER BY子句的排序依据是什么表,或者您会得到一个异常的列异常(如果两个表都有一个名为id的列)。
您使用了一个INNER JOIN
,它只会在两个表都有相应行的情况下显示数据。尝试使用LEFT
或RIGHT
联接。