【问题标题】:Loop through database contents depending on ID根据 ID 循环遍历数据库内容
【发布时间】:2021-10-04 00:03:32
【问题描述】:

我有一个带有 MySQL 数据库的天蓝色 PHP Web 应用程序。

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

数据库设置:

司机

driverID driverName
(AI) 1 Bob

打开工作

jobID jobName jobDate destination etc etc etc driver_FK driverName_FK
(AI) 1 job 1 Monday, 1st Sep New Zealand blah blah (get from driver) (get from Driver)

这是我的代码: 我在其他地方也有一个连接。而且我还没有为司机姓名添加连接。

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 号的每个作业,而不是在不同的块中,如下所示:(忽略设计等方面的差异)

我假设我需要在第一个循环中运行第二个循环,但我对第二个循环中的条件感到困惑。

【问题讨论】:

  • 我需要在第一个循环中运行第二个循环。 提示:(a) 在第一个循环中查询,选择不同的驱动程序 ID,驱动程序名称。 (b) 在第二个循环中查询:选择与此驱动程序 ID 相关的那些数据。
  • 谢谢!这似乎奏效了,因为它为驱动程序添加了多个工作,但它仍然重复相同的驱动程序和工作,具体取决于分配给驱动程序的数量。希望这是有道理的

标签: php html mysql


【解决方案1】:

你可以这样做

只需使用查询结果创建一个数组,创建一个以驱动程序 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>";
    }
}

【讨论】:

  • 谢谢,很遗憾,我无法让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2012-08-25
  • 1970-01-01
相关资源
最近更新 更多