【问题标题】:Join Two MySQL Table and Display Result in Table连接两个 MySQL 表并在表中显示结果
【发布时间】:2019-02-02 18:02:53
【问题描述】:

我有两个名为 t_user 和 t_chat 的表。我正在尝试在 PHP 表中显示来自 t_chat 的消息,如下所示。

     $quotes_qry="SELECT * FROM t_chat ORDER BY id DESC LIMIT $start, $limit";
     $result=mysqli_query($mysqli,$quotes_qry);
    <?php   
                            $i=0;
                            while($row=mysqli_fetch_array($result))
                            {   

                        ?>
                            <tr>

                              <td><?php echo ++$sr+$start;?></td> 
                              <td><?php echo $row['sender'];?></td>                
                              <td><?php echo nl2br($row['receiver']);?></td>
                              <td><?php echo nl2br($row['message']);?></td>
                              <td><?php echo time_elapsed_string($row['time']);?></td>
                              <td><a href="?id=<?php echo $row['id'];?>" class="" onclick="return confirm('Are you sure you want to delete this row?');"><img src="images/delete-icon.png"></a></td>
                            </tr>
                    <?php
$i++;
                        }
                ?> 

我想显示位于名为t_user with username column 的表中的发送者和接收者名称。我是 PHP 新手,很困惑如何实现它。让我知道是否有人可以帮助我完成我的任务。非常感谢!

注意:t_chat 表有用户 ID 女巫列名称称为发送者和接收者,目前我在上表中显示该用户 ID,而不是我想要显示用户名。 谢谢

【问题讨论】:

  • t_chat 表中是否还有用户名列?
  • @tshimkus 我们在 t_chat 表中有发送者和接收者的 user_id,而不是用户名。我想从 t_user 获取用户名。谢谢
  • 你可以使用 SQL JOIN - dev.mysql.com/doc/refman/8.0/en/join.html
  • 要连接表,您需要一个在两个表中都存在的字段,您可以使用它来匹配记录。你有什么可以这样工作的吗?它们是唯一的吗(只有一行具有该索引)?
  • @tshimkus 是表 t_user id 与 t_chat 相同,有发送者和接收者。两者在两个表中都很常见。谢谢

标签: php mysql


【解决方案1】:

连接可能如下所示:

SELECT t_chat.sender AS 'sender', t_chat.receiver AS 'receiver', t_chat.message AS 'message', t_chat.time AS 'time', t_chat.id AS 'id', user1.username AS 'senderusername', user2.username AS 'receiverusername'  
FROM t_chat 
LEFT JOIN t_user AS user1 ON t_chat.sender = user1.id
LEFT JOIN t_user AS user2 ON t_chat.receiver = user2.id
ORDER BY id DESC

在此示例中,我将表加入两次(作为 user1 和 user2),以便每次查找都独立引用 t_user 表。

我还使用AS 为每一列命名,以便稍后在您的代码中更容易地引用它们。

【讨论】:

  • 第一行中的错误称为“解析错误:语法错误,意外的'sender' (T_STRING) in”
  • 我的错。您将查询用双引号括起来,因此字符串被分解了。将我示例中的所有双引号替换为单引号或像这样\" 转义它们
  • 是的,我已经解决了,很抱歉,但我不知道如何从中显示价值?
  • 与您之前的操作方式相同:$row['message']$row['senderusername'] 等。AS 为列提供了唯一名称,因此您无需键入 $row['t_chat.message'] 即可访问该列.
  • 查询没有给出任何错误,但它也没有在表中显示任何内容。谢谢
【解决方案2】:

试试这个 sql(t_user 表必须有一个与 t_chat 中的 userid 匹配的 id 列):

$quotes_qry="SELECT t1.sender, t1.receiver, t1.message, t1.time, t2.username FROM t_chat AS t1 INNER JOIN t_user AS t2 ON t1.userid=t2.id ORDER BY t1.id DESC LIMIT $start, $limit";

有关 MySQL JOIN 的更多详细信息和示例,您可以在以下教程中找到:

https://coursesweb.net/php-mysql/mysql-inner-left-join-right-join_t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 2012-07-13
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多