Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 Can';t获取查询以引用第三个表中的用户名_Php_Sql - Fatal编程技术网

Php Can';t获取查询以引用第三个表中的用户名

Php Can';t获取查询以引用第三个表中的用户名,php,sql,Php,Sql,我已经做了两天了,现在转向stackoverflow寻求帮助。我试图返回用户为“故事”撰写的每一篇文章的显示名称,其中故事(SID)可以有多个用户参与其中(即,这里称为WID的多个书写ID) 除了显示名称对于每一段文字都是相同的之外,其他一切都可以正常工作。当我为$getauthor执行var_dump()时,我只需获得wp_用户中所有display_名称的数组。但是我需要返回的只是在writing和stories表中为该故事(SID)的writing表中编写一篇文章(WID)的作者的显示名称

我已经做了两天了,现在转向stackoverflow寻求帮助。我试图返回用户为“故事”撰写的每一篇文章的显示名称,其中故事(SID)可以有多个用户参与其中(即,这里称为WID的多个书写ID)

除了显示名称对于每一段文字都是相同的之外,其他一切都可以正常工作。当我为$getauthor执行var_dump()时,我只需获得wp_用户中所有display_名称的数组。但是我需要返回的只是在writing和stories表中为该故事(SID)的writing表中编写一篇文章(WID)的作者的显示名称

再清楚一点: 当某人开始一篇博客文章(称为故事)时,它会在故事中为该用户ID创建一条带有新SID的记录。然后,当人们添加到该SID时,每次添加都会在写入表中提供一条具有相同SID的WID记录。我的代码所做的是为所有结果(编写的片段)返回SID的原始作者,而实际上应该发生的是每个WID都应该有添加该片段的作者

它应该是这样的:

Author: Kate
This is my blog
Author: Mike
This is my addition.
但它看起来是这样的:

Author: Kate 
This is my blog
Author: Kate
This is my addition.
以下是数据库体系结构:

wp_用户表:

ID
display_name
故事表:

SID
ID
story_name
书写表:

WID
ID 
SID
approved
text
以及守则:

<?php
global $wpdb;
$user_ID = get_current_user_id();
// get the SID
$the_SID = ( isset( $_GET['writing'] ) ) ? $_GET['writing'] : false;

$results = $wpdb->get_results("
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')");

$sql = "SELECT display_name FROM wp_users where ID = ". $results->writing.ID .";";  
$getauthor = $wpdb->get_results($sql);
$author = $getauthor[0]->display_name;
?>

<?php 
foreach ($results as $result) {
echo "<br>" . "Author: " . $author . "<br>" . $results[0]->text . "<br>";
}
?>
这是您的查询:

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');
标识的列都具有相同的名称,
ID
。您应该为它们定义单独的别名:

SELECT wp_users.ID as userID, wp_users.display_name,
       stories.ID as storiesID, stories.SID, stories.story_name, stories.category,
       writing.ID as writingID, 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');
那么这也许会奏效:

$sql = "SELECT display_name FROM wp_users where ID = ". $results->writingID .";"; 
但是,只需再次加入
wp\u用户
,您就可以在同一个查询中获得所需内容:

SELECT u.ID as userID, u.display_name,
       s.ID as storiesID, s.SID, s.story_name, s.category,
       w.ID as writingID, w.text, w.approved,
       uw.display_name as writer_name
FROM stories s JOIN
     wp_users u
     ON s.ID = u.ID JOIN
     writing w
     ON s.SID = w.SID JOIN
     wp_users uw
     ON w.ID = uw.ID
WHERE (s.SID = $the_SID) AND (w.approved = 'Y'); 

谢谢你,戈登!但结果仍然相同。它只是显示了同一个作者的所有作品。。。我怀疑另一个连接是必要的,因为代码似乎没有引用ID@user5000 . . . 即使是最后一个版本?也许你的代码有其他问题。例如,您可能认为自己没有运行查询。是的,我尝试了上一个版本,并将$author变量改回$results[0]->display\u name,但它只会为所有结果返回相同的作者名称。我有一种失败主义的态度,好像我永远不会让它工作:(通过var\u dump($results)我知道我的原始代码中的$results确实会从书写表中为每段文本返回正确的ID。但是,显示名称只是与故事表中的ID相对应。因此,我还需要以某种方式将ID写入wp_用户中的ID,但每次尝试都不会返回任何变量的结果。我尝试添加join writing ON wp_users.ID=writing.ID到$results查询时没有运气。可能无法在3个表中加入ID吗?为了澄清上述评论,我的原始代码确实从writing表中为每个SID blurb返回了正确的ID。但我只是无法从wp_用户那里获取相应的diplay_名称,因为第3个加入会弄乱查询当我尝试它时,没有任何结果是返回的。