首页 > 解决方案 > 根据 ID 循环遍历数据库内容

问题描述

我有一个带有 MySQL 数据库的 azure PHP Web App。

我需要访问数据库中的 2 个表并遍历每个条目,显示连接到每个 ID 的内容。

数据库设置:

司机

司机ID 司机姓名
(人工智能) 1 鲍勃

打开工作

工作ID 职位名称 工作日期 目的地 等等等等 驱动程序_FK driverName_FK
(人工智能) 1 工作 1 9 月 1 日,星期一 新西兰 胡说八道 (从司机那里得到) (从司机那里得到)

这是我的代码:我在其他地方也有一个连接。而且我还没有为驱动程序名称添加连接。

function openJobsList()
{
    global $conn;
    $query = mysqli_query($conn, "SELECT openjobs.jobName, openjobs.jobType, openjobs.orderNumber, openjobs.referenceNumber, openjobs.pallets, openjobs.jobWeight, openjobs.jobStatus, driver.DriverID, driver.driverName
                                    FROM openjobs
                                    INNER JOIN driver ON openjobs.driver_fk = driver.DriverID");

    while ($row = mysqli_fetch_assoc($query)) {

        $id = $row['DriverID'];
        //$driverName_fk = $row['driverName_fk'];
        $jobName = $row['jobName'];
        $jobType = $row['jobType'];
        $orderNumber = $row['orderNumber'];
        $referenceNumber = $row['referenceNumber'];
        $pallets = $row['pallets'];
        $jobWeight = $row['jobWeight'];
        $jobStatus = $row['jobStatus'];

        echo "<div class='card mainPageJobCard my-2'>
                <div class='card-body'>
                    <div class='row justify-content-between'>
                        <div class='col-11'>
                            <h5 class='card-title'>Driver: {$id}</h5>
                        </div>
                        <div class='col-1'>
                            <a href='pages/webAddJob.php' class='btn btn-primary btn-sm text-light rounded-pill'>Add Job</a>
                        </div>
                    </div>
                    <div class='row'>
                        <div class='col pt-3'>
                            <table class='table table-bordered table-responsive'>
                                <thead>
                                 <tr class='table-light'>
                                        <th scope='col' class='col-2'>Job</th>
                                        <th scope='col'>Type</th>
                                        <th scope='col' class='col-2'>Order #</th>
                                        <th scope='col' class='col-2'>Reference</th>
                                        <th scope='col'>Pallets</th>
                                        <th scope='col'>Weight (kg)</th>
                                        <th scope='col' class='col-2'>Status</th>
                                    </tr>
                                </thead>
                                    <tr>
                                       <th>{$jobName}</th>
                                       <td>{$jobType}</td>
                                       <td>{$orderNumber}</td>
                                       <td>{$referenceNumber}</td>
                                       <td>{$pallets}</td>
                                       <td>{$jobWeight}</td>
                                       <td>{$jobStatus}</td>
                                    </tr>
                            </table>
                        </div>
                    </div>
                </div>
            </div>";
    }
}

成功获取 DriverID 并显示分配给它的所有作业,但它们显示如下:(参见驱动程序 6)

当前显示的屏幕截图

但我需要它来显示分配给 ID 号的每个作业,而不是在不同的块中,如下所示:(忽略设计等方面的差异)

我需要它看起来像什么的屏幕截图

我假设我需要第二个循环才能在第一个循环中运行,但我很难理解我会在第二个循环中放置什么作为条件。

标签: phphtmlmysql

解决方案


你可以做这样的事情

只需使用查询结果创建一个数组,创建一个以驱动程序 ID 作为数组键的多维数组。你会有一个这样的数组,

Array
(
    [driver_id1] => Array
        (
            [0] => [job1]
            [1] => [job2]
            [2] => [jbo3]
        )

    [driver_id2] => Array
        (
            [0] => [job1]
            [1] => [job2]
            [2] => [jbo3]
        )

)

然后循环创建的数组。它将为驱动程序创建一个框,并在表体内创建另一个循环以显示驱动程序的相关工作。

function openJobsList()
{
$data = [];
    global $conn;
    $query = mysqli_query($conn, "SELECT openjobs.jobName, openjobs.jobType, openjobs.orderNumber, openjobs.referenceNumber, openjobs.pallets, openjobs.jobWeight, openjobs.jobStatus, driver.DriverID, driver.driverName
                                    FROM openjobs
                                    INNER JOIN driver ON openjobs.driver_fk = driver.DriverID");

while($rows = mysqli_fetch_assoc($query)){
     $data[$id][] = $rows
}

    foreach($rows as $driver => $value ) {

        $id = $driver;


        echo "<div class='card mainPageJobCard my-2'>
                <div class='card-body'>
                    <div class='row justify-content-between'>
                        <div class='col-11'>
                            <h5 class='card-title'>Driver: {$id}</h5>
                        </div>
                        <div class='col-1'>
                            <a href='pages/webAddJob.php' class='btn btn-primary btn-sm text-light rounded-pill'>Add Job</a>
                        </div>
                    </div>
                    <div class='row'>
                        <div class='col pt-3'>
                            <table class='table table-bordered table-responsive'>
                                <thead>
                                 <tr class='table-light'>
                                        <th scope='col' class='col-2'>Job</th>
                                        <th scope='col'>Type</th>
                                        <th scope='col' class='col-2'>Order #</th>
                                        <th scope='col' class='col-2'>Reference</th>
                                        <th scope='col'>Pallets</th>
                                        <th scope='col'>Weight (kg)</th>
                                        <th scope='col' class='col-2'>Status</th>
                                    </tr>
                                </thead>
                                   <?php foreach($value as $row){
                                         $jobName = $row['jobName'];
                                         $jobType = $row['jobType'];
                                         $orderNumber = $row['orderNumber'];
                                        $referenceNumber = $row['referenceNumber'];
                                        $pallets = $row['pallets'];
                                        $jobWeight = $row['jobWeight'];
                                         $jobStatus = $row['jobStatus'];
                                      }?>
                                    <tr>
                                       <th>{$jobName}</th>
                                       <td>{$jobType}</td>
                                       <td>{$orderNumber}</td>
                                       <td>{$referenceNumber}</td>
                                       <td>{$pallets}</td>
                                       <td>{$jobWeight}</td>
                                       <td>{$jobStatus}</td>
                                    </tr> 
                                    <?php } ?>
                            </table>
                        </div>
                    </div>
                </div>
            </div>";
    }
}

推荐阅读