【问题标题】:How to join multiple tables, 1st table is returned ( file_id ) and 2nd table is file_list (file_no)?如何连接多个表,返回第一个表(file_id),第二个表是 file_list(file_no)?
【发布时间】:2019-06-20 21:01:20
【问题描述】:

我正在尝试加入两个表。第一个表名为“returned”,带有字段(file_id),第二个表名为“file_list”。两个表字段 'file_id' 和 'file_no' 共享相同的值。

file_list 表

+---+---------+------------------+-------+
|ID | File ID | File Desc.       | Status|
+---+---------+------------------+-------+
|8  | 400/3   | 1 - Test 1 400/3 |       |
+---+---------+------------------+-------+

返回的表

+---------+-----------------+---------------+-------------+-------------+------------+
| File ID | File NAME       | Employee NAME | Date BORROW | Date RETURN |File STATUS |
+---------+-----------------+---------------+-------------+-------------+------------+
| 400/3   | 1 - Test 1 400/3| Syuhada       | 2019-06-19  | 2019-06-18  | Returned   |
+---------+-----------------+---------------+-------------+-------------+------------+  

我正在尝试将状态从返回的表发送到 file_list 表

while($result=mysqli_fetch_array($query,MYSQLI_ASSOC))
{
?>
  <tr>
    <td><div align="center"><?php echo $result["id"];?></div></td>
    <td><?php echo $result["file_no"];?></td>
    <td><?php echo $result["file_desc"];?></td>
    <td>
      <div align="center">
        <?php
            /*$file_ID = "SELECT file_no FROM file_list";*/
            $sql = "SELECT * From returned
                    INNER JOIN file_list
                    ON returned.file_id = file_list.file_no;";
            $resultRet = $dbConn->query($sql);
            while($rs=$resultRet->fetch_assoc()){
              ?>
              <?php echo $rs["status"]; ?>
        <?php
            }
        ?>
      </div>
    </td>

【问题讨论】:

  • 请添加表架构。此外,对于第二个查询,您需要添加一个 WHERE 条件以通过 $result["file_no"] 进行过滤
  • 问题是查询还是php?你想从查询中得到什么?你能在plain text中添加一个例子吗?
  • 给定查询有什么问题?
  • 它不回显状态

标签: php mysql


【解决方案1】:

由于您只需要返回表中的文件状态,因此可以使用以下查询:

$sql = "SELECT * From returned WHERE file_id = " . $result["file_no"];

我假设第一个查询从 file_list 表返回行。

当您需要在一个查询中从多个表中获取数据时,内连接非常有用。

如果你还想使用 JOIN,查询应该是这样的:

$sql = "SELECT * From returned
                INNER JOIN file_list
                ON returned.file_id = file_list.file_no AND returned.file_id = " . $result["file_no"] ;

编辑

使用 Prepared Statements,仅显示文件状态的一段代码(有和没有 JOIN)。

<td>
    <div align="center">
      <?php
        $sql = "SELECT * FROM returned
                    WHERE file_id = ?";

        $sql_join = "SELECT * FROM returned
                        INNER JOIN file_list
                        ON returned.file_id = file_list.file_no AND returned.file_id = ?";

        $stmt = $conn->prepare($sql_join);
        $stmt->bind_param("i", $result["file_no"]);
        $stmt->execute();
        $result = $stmt->get_result();
        while($rs = $result->fetch_assoc()) {
            echo $rs["status"];
        }
        $stmt->close();
      ?>
    </div>
</td>

【讨论】:

  • @Dharman 因为数据直接来自数据库,所以没有 SQL 注入。当然,有更好的方法来编写这个 sql
猜你喜欢
  • 2021-08-23
  • 1970-01-01
  • 2020-06-29
  • 2012-10-11
  • 1970-01-01
  • 2018-05-17
  • 2015-01-19
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多