当前位置: 首页 > 知识库问答 >
问题:

PHP:左连接2表并打印所有记录

夏烨霖
2023-03-14

我有两个表记录在我的数据库,看起来像这样:

表1第1列:

topic_id    name
21          my computer

表2列如下:

reply_id    topic_id    message
    1           21       blabla
    2           21       blue

其中表2中的topic_id列是表1的外键

我想回显表2中的所有回复以及表1中的主题名称(#21)。所以,我提出了这样的问题

$q="SELECT name, message
FROM table1
LEFT JOIN table2
ON table1.topic_id = table2.topic_id
";

但是,结果/输出返回主题的名称和只有一个回复,而不是预期的2个(或全部)。我错过什么了吗?

我使用LEFT JOIN,因为有些主题仍在等待答复。如果没有任何回复,则主题名称仍会在浏览器中打印。

我还尝试添加

GROUP BY table1.topic_id

但还是没有运气!

你能帮忙吗?谢啦

编辑:为了澄清这个问题,我添加了php代码以获取记录,如下所示:

如你所知,名字只需要打印一次。所以,我这样编码:

$tid = FALSE;
if(isset($_GET['qid']) && filter_var($_GET['qid'], FILTER_VALIDATE_INT, array('min_range'=>1) ) ){

// create the shorthand of the question ID:

$tid = $_GET['tid'];

// run query ($q) as shown above

$r = mysqli_query($dbc, $q) or die("MySQL error: " . mysqli_error($dbc) .     "<hr>\nQuery: $q");
if (!(mysqli_num_rows($r) > 0) ){

    $tid = FALSE; // valid topic id

}


}//isset($_GET['qid']

if ($tid) { //OK

    $printtopic = FALSE; // flag variable to print topic once

        while($content = mysqli_fetch_array($r, MYSQLI_ASSOC)){

            if (!$printtopic) {
              echo $content['name'];
              $printtopic= TRUE;
           }

      }
} // end of $tid

// Print the messages if any:
echo $content['message'];

共有3个答案

双元魁
2023-03-14

在解决这个问题后,我发现问题在于我必须将查询更改为内部联接,并添加WHERE子句,如下所示:

WHERE table2.reply_id = {the given topic_id}

那么它工作得很好!

对不起打扰大家了!

廉鸿运
2023-03-14

尝试:

$q="SELECT table2.reply_id, table1.name, table2.message
FROM table2
LEFT JOIN table1
ON table1.topic_id = table2.topic_id
";
南门祯
2023-03-14

尝试内连接

$q="SELECT name, message
FROM table1
INNER JOIN table2
ON table1.topic_id = table2.topic_id";
 类似资料:
  • 问题内容: Java中有一种简单的方法可以执行以下操作吗? 连接到打印机(将是本地打印机,并且是连接到机器的唯一打印机)。 在2个不同的打印机纸盘中打印2页的页面。 获取当前的打印队列计数,即我有100项要打印的项目和34项当前已打印,则打印机队列现在应显示为66。 问题答案: 一些快速提示: 从Java打印:请参阅基本打印程序 打印作业的状态:您可以使用PrintJobListener获得一些有

  • 它还会返回这个表,遗漏一些行(我希望它给出所有流派,而不仅仅是演员在其中扮演角色的流派): 有趣的是,它为“动画”返回了“0”,但为“儿童”或“喜剧”没有行,这是我正在寻找的结果(所有流派都返回了)。我做错了什么?

  • 所有拨打记录     关于通话记录 接受/拒绝联系人名单的登录要求 删除通话记录 显示特定的通话记录

  • 版本 1.6.0 接口 updateAppMessageShareData updateTimelineShareData onMenuShareTimeline(即将废弃) onMenuShareAppMessage(即将废弃) onMenuShareQQ(即将废弃) onMenuShareWeibo onMenuShareQZone startRecord stopRecord onVoice

  • 本文向大家介绍javaScript 连接打印机,打印小票的实例,包括了javaScript 连接打印机,打印小票的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇javaScript 连接打印机,打印小票的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 当R用科学符号将一个大数转换为字符串时,它包括所有有效数字,没有尾随零。有没有可能在C中用来完成这个? 我尝试了,但这似乎最多包含5个十进制数字。我还尝试使用设置更高的精度,但这将包括非有效数字和尾随零。 有没有一种方法可以让的行为增加5位数的限制?