【问题标题】:I dont know whats wrong with my SQL join, Its my fisrt time using it我不知道我的 SQL 连接有什么问题,这是我第一次使用它
【发布时间】:2013-09-01 07:16:52
【问题描述】:

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

$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 连接...

谢谢

【问题讨论】:

  • 使用左连接也许你在 2 个表中没有相同的 id ?你试过左加入吗?你能给我们结构和一些记录吗

标签: php mysql sql join inner-join


【解决方案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

【讨论】:

    【解决方案2】:

    要了解查询出了什么问题,您需要了解 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 的列)。

    【讨论】:

    • 谢谢你,这就是我喜欢这个博客的原因@JeroenvanTongeren 你能告诉我,我是如何在行之间建立关系的吗?或者我只是想显示ideas表的内容,我用LEFT JOIN还是不行。
    • ideas.idcreador 和 follow.idseguidor 应该是相同的类型(INTEGER(10)、VARCHAR(32) 等)并且应该具有相同的值。如果您有一行 idcreador 值为 1 的想法,并且后面有一行 idseguidor 1,则 ON 子句条件将验证为真,并将显示在结果中。您应该研究 FOREIGN KEY CONSTRAINTS,它可能会为您澄清几件事
    【解决方案3】:

    您使用了INNER JOIN,它仅在两个表都有对应的行时才会显示数据。尝试使用LEFTRIGHT 加入。

    【讨论】:

    • 这不是“对应行”?? idea.idcreador=follow.idseguidor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多