【问题标题】:Can't join 3 tables in mysql to link user ID无法在 mysql 中加入 3 个表以链接用户 ID
【发布时间】:2014-08-03 00:39:45
【问题描述】:

我在想这可能是不可能的,但我想在 ID(用户)列中加入 3 个表,所有 3 个表都有。已经做了好几天了。对于愿意提供帮助的人来说,这可能有点令人困惑......

表架构和表解释为:

wp_users (ID, display_name) 这是用户表

stories (ID, SID) 此表存储故事名称和发起人

writing (ID, SID, WID, text) 该表存储了不同作者添加到 SID 的所有文字,因此这里可以有多行 SID,每行具有不同的用户 ID。 ID 是用户并且与其他表中的 ID 值匹配。 WID 是每个 SID 的写作片段。

每个故事 ID (SID) 在写作表中都有多条记录,每条记录都有不同的写作 ID。 stories 表只有一个 SID 和一个 ID——故事的开始人。我的代码仅根据此故事表中的 ID(开始故事的人)给出 display_name。我需要它来显示其他人为该 SID 添加的每篇文字的显示名称,这些文字存储在书写表中。

该代码目前可以工作,只是它为存储在写作表中的所有作品提供相同的作者 (display_name),即使每个写作作品 (WID) 有不同的作者。

问题是,一旦我尝试添加另一个连接,例如 join wp_users on writing.ID = wp_users.ID 我没有得到任何变量的结果。如果我不尝试在 ID 处加入这第三张表,则代码有效,但只会显示

SELECT wp_users.ID, wp_users.display_name,
stories.ID, stories.SID, stories.story_name, stories.category,
writing.ID, writing.text, writing.approved
FROM stories
JOIN wp_users ON stories.ID = wp_users.ID
JOIN writing ON stories.SID = writing.SID
WHERE (stories.SID = $the_SID) AND (writing.approved = 'Y')
");

<?php 
foreach ($results as $result) {
echo "<br>" . "Author: " . $result->display_name . "<br>" . $result->text . "<br>";

问题的一部分可能是所有 3 个表的名称 ID 不能相同吗?甚至可以在 ID 上加入 3 个表吗?非常感谢任何帮助...

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    当然可以JOIN 任意数量的表格。这仅取决于您追求的结果。另外,我认为您正在关注LEFT JOIN 进行这些查询。

    如果您的“主要选择”将是 writing 表,请尝试以下操作:

    SELECT
        wp_users.ID,
        wp_users.display_name,
        stories.ID,
        stories.SID,
        stories.story_name,
        stories.category,
        writing.ID,
        writing.text,
        writing.approved
    FROM writing
        LEFT JOIN stories on writing.SID = stories.SID
        LEFT JOIN wp_users ON writing.ID = wp_users.ID
    WHERE (stories.SID = $the_SID) AND (writing.approved = 'Y')
    

    【讨论】:

    • 有趣。但同样的结果。通过在 $results 上执行 var_dump() 我看到了同样的事情....它确实返回了每篇文章的所有记录,甚至为每篇文章返回了正确的用户 ID,但它仍然不会显示正确的作者姓名(display_name) 在回声中。它始终为所有记录显示相同的作者姓名,这是开始故事的人的用户名。也就是说,它似乎仍在返回从 stories.ID 传递的 ID 的显示名称,而不是从 writing.ID 传递的用户名
    • 我想你刚刚回答了你自己的问题。尝试将行 LEFT JOIN wp_users ON stories.ID = wp_user.ID 更改为 LEFT JOIN wp_users ON writing.ID = wp_user.ID。我已经编辑了我的答案
    • 你摇滚!!!!非常感谢!就是这样!我有几个人知道那里的东西,但无法弄清楚这一点。非常感谢!!!
    • 不用担心。查看一些好的资源并了解JOINs 以及它们如何工作、它们有何不同以及何时使用每种类型。这是一个很好的视觉指南:blog.codinghorror.com/a-visual-explanation-of-sql-joins
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2012-07-16
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多