Php 在关系表中使用外键选择字段

Php 在关系表中使用外键选择字段,php,sql,Php,Sql,我试图显示主题create(username),但必须通过一个关系表来检索它。我已经创建了一个显示回复创建者(用户名)的查询,我相信我需要一个子查询,但以前从未使用过 $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users WHERE user_id=b.user_i

我试图显示主题create(username),但必须通过一个关系表来检索它。我已经创建了一个显示回复创建者(用户名)的查询,我相信我需要一个子查询,但以前从未使用过

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
我基本上是想用外键检索用户名,希望下面能解释一下:

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
Forum\u Responses.topic\u id>>>>>Forum\u topics.topic\u id和Forum\u topics.user\u id>>>>>>users.user\u id

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
各表如下:

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
论坛的答复

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
  • 答复:
  • 主题id
  • 用户id
  • 答复(文本)
  • 答复日期
论坛主题

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
  • 主题id
  • 类别识别码
  • 用户\u id
  • 题目
  • 主题描述
  • 主题日期
使用者

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
  • 用户id
  • 用户名
这是我当前显示的代码 论坛主题。主题标题,论坛回复。回复日期,论坛回复。用户id(显示回复创建者的用户名),论坛回复。回复文本

    $queryreply = "SELECT forum_replies.reply_id, forum_replies.topic_id, forum_replies.user_id,
                       forum_replies.reply_text, forum_replies.reply_date, users.user_id, users.username, forum_topics.user_id,
                       forum_topics.topic_id,forum_topics.topic_title, forum_topics.topic_date
                       FROM forum_replies
                       LEFT JOIN forum_topics
                       ON forum_replies.topic_id = forum_topics.topic_id
                       LEFT JOIN users
                       ON forum_replies.user_id = users.user_id

                       ";


        $result = mysql_query($queryreply) or die (mysql_error());
        $row = mysql_fetch_array($result); 

          if(empty($row['topic_id'])){
            echo "No replies have been posted in this Topic, be the first to have your say using form below.";} ?>
        <table id="categorytable">

                <tr><td><?php echo '<b>'.$row['topic_title'].'</b>';?></b><br><br></td></tr>
                <tr><td><?php echo $row['reply_date'].' - '.$row['username'].' Replied with: ';?><br><br></td></tr>
                <tr><td><?php echo $row['reply_text'];?></td></tr>
     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
$queryreply=“选择论坛\u represponse.reply\u id,forum_urepresponse.topic\u id,forum\u represponse.user\u id,
论坛回复。回复文本,论坛回复。回复日期,用户。用户id,用户。用户名,论坛主题。用户id,
论坛主题。主题id、论坛主题。主题标题、论坛主题。主题日期
来自论坛的回复
左键加入论坛主题
在论坛上回复.topic\u id=论坛主题.topic\u id
左加入用户
在论坛上\u回复.user\u id=users.user\u id
";
$result=mysql\u query($queryreply)或die(mysql\u error());
$row=mysql\u fetch\u数组($result);
if(空($row['topic_id'])){
echo“此主题中未发布任何回复,请首先使用下面的表格发表您的意见。”;}?>




我知道mysql_*函数已被弃用,但uni工作人员要求我使用它们。如果有任何帮助,我将不胜感激。谢谢

添加另一个加入:

SELECT forum_replies.reply_id, forum_replies.topic_id, forum_replies.user_id,
    forum_replies.reply_text, forum_replies.reply_date, users.user_id, users.username, forum_topics.user_id,
    forum_topics.topic_id,forum_topics.topic_title, forum_topics.topic_date, 
    users.user_id as topic_user_id, users.username as topic_username, 
FROM forum_replies
    LEFT JOIN forum_topics ON forum_replies.topic_id = forum_topics.topic_id
    LEFT JOIN users ON forum_replies.user_id = users.user_id
    LEFT JOIN users u2 ON forum_topics.user_id = u2.user_id
     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";

…正如您在另一个问题中提到的:使用别名可以根据需要多次加入表。所以您可以使用不同的ON语句将表用户连接到更多的表用户

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";
选择
论坛回复。回复id,论坛回复。主题id,论坛回复。用户id,论坛回复。回复文本,
论坛回复。回复日期,用户。用户id,用户。用户名,论坛主题。用户id,
论坛主题。主题id,论坛主题。主题标题,论坛主题。主题日期,
topic_creators.username
来自论坛的回复
左侧加入论坛\u论坛上的主题\u回复。主题\u id=论坛\u主题。主题\u id
左加入论坛上的用户。\u回复。用户\u id=用户。用户\u id

左键作为论坛上的主题创建者加入用户。用户id=主题创建者。用户id另一个stackoverflow用户向我发送了代码,现在它工作得很好,不过谢谢你们的帮助。我非常感谢你的建议。以下是您感兴趣的代码:

     $queryreply = "SELECT a.reply_id,a.reply_text, a.reply_date, b.topic_title, c.username AS reply_user, (SELECT username FROM users 
        WHERE user_id=b.user_id) AS topic_creator FROM forum_replies a
        LEFT JOIN forum_topics b ON a.topic_id=b.topic_id
        LEFT JOIN users c ON a.user_id=c.user_id

                       ";

不行-你有两个名为username的列我已经测试过了,效果很好。在你的回答中,你有两列名为user_id。我也是,如果要澄清的话)这两列我都有别名。另一个stackoverflow用户给我发送了代码,它现在工作得很好,不过谢谢你们的帮助。非常感谢您的建议。感谢您的帮助,我使用别名添加了另一个加入,但当我尝试呼出主题创建者的用户名时,它会显示回复创建者。你知道我应该使用什么代码吗?当然你必须使用
echo$row['topic_username']我在声明中使用的名称。顺便说一句-你应该编辑你的问题并添加你现在所做的事情另一个stackoverflow用户向我发送了代码,它现在工作得很好,谢谢你们的帮助。我非常感谢你的建议。以下是您感兴趣的代码:$queryreply=“选择a.reply\u id、a.reply\u text、a.reply\u date、b.topic\u title、c.username作为reply\u用户(从user\u id=b.user\u id的用户中选择用户名)作为论坛的主题创建者,论坛答复左加入论坛主题b。主题id=b。主题id左加入用户c。用户id=c。用户id“;