Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Php 无法在mysql中联接3个表以链接用户ID_Php_Mysql - Fatal编程技术网

Php 无法在mysql中联接3个表以链接用户ID

Php 无法在mysql中联接3个表以链接用户ID,php,mysql,Php,Mysql,我想这可能是不可能的,但是我想在ID users列中连接3个表,这3个表都有。我已经做了好几天了。对于任何愿意帮助的人来说,这可能有点困惑 表格结构和表格说明如下: wp_users ID,display_name这是用户表 故事ID,SID此表存储故事名称以及故事的发起人 写入ID、SID、WID、text此表存储不同作者添加到SID的所有写入内容,因此此处可以有多行SID,每行具有不同的用户ID。ID是用户,与其他表中的ID值匹配。WID是每个SID的书写片段 每个故事ID SID在写入表中

我想这可能是不可能的,但是我想在ID users列中连接3个表,这3个表都有。我已经做了好几天了。对于任何愿意帮助的人来说,这可能有点困惑

表格结构和表格说明如下:

wp_users ID,display_name这是用户表

故事ID,SID此表存储故事名称以及故事的发起人

写入ID、SID、WID、text此表存储不同作者添加到SID的所有写入内容,因此此处可以有多行SID,每行具有不同的用户ID。ID是用户,与其他表中的ID值匹配。WID是每个SID的书写片段

每个故事ID SID在写入表中都有多条记录,每条记录都有不同的写入ID。故事表只有一个SID和一个ID—故事的开始者。我的代码仅基于此故事表中的ID(故事的开始者)提供display_名称。我需要它显示由其他人为该SID添加的每段写入的显示名称,这些名称存储在写入表中

该代码目前可以正常工作,只是它为存储在writing表中的所有书写段提供了相同的author display_名称,即使每个书写段有不同的作者

问题是,只要我尝试添加另一个连接,比如join wp_users on write.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个表吗?非常感谢您的帮助…

请确保您可以加入任意多个表。这取决于你想要什么结果。另外,我认为您正在寻找这些查询的左JOIN

如果您的主要选择是写入表,请尝试以下操作:

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_转储,我看到了相同的情况……它确实返回了每段写入的所有记录,甚至还返回了每段写入的正确用户ID,但它仍然不会在echo中显示正确的作者名display_name。它会为所有记录显示相同的作者姓名,这是故事开始者的用户名。也就是说,它似乎仍然返回stories.ID传递的ID的显示名,而不是write.ID传递的用户名。我想您刚刚回答了自己的问题。尝试将stories.ID=wp_user.ID上的LEFT JOIN wp_users行更改为write.ID=wp_user.ID上的LEFT JOIN wp_users。我已经编辑了我的答案,你太棒了!!!!!非常感谢!就这样!我有一些人知道这些东西,但却不明白这一点。非常感谢!!!别担心。查看一些好的资源,了解联接及其工作原理、不同之处以及何时使用每种类型。这是一个很好的视觉指南: