在php中的多个while循环中列重复(ID总数)时间

Posted

技术标签:

【中文标题】在php中的多个while循环中列重复(ID总数)时间【英文标题】:Columns repeats (total number of ID) time within multiple while loop in php 【发布时间】:2017-10-01 13:01:22 【问题描述】:

我创建了一个表,其中我只创建了一个 <tr> 和 11 个 <td>。前 9 个 <td> 的值来自一个 while 循环,最后两个 <td> 的值来自第二个 while 循环。

两个While 循环都在<tr> 中执行。现在,我得到了正确的值,但它重复了 <td> 作为记录总数,例如我总共有 5 条记录,它给了我 25 条记录,第一条记录连续执行 5 次,然后就这样休息。

我的问题是执行一次记录,而不是重复重复的记录。

这是我的代码:

<table id="myTable" class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Email</th>
            <th>Status</th>
            <th>Reg on</th>
            <th>Upload</th>
            <th>Total Upload</th>
            <th>Sale</th>
            <th>Total Sale</th>
            <th>Purchase</th>
            <th>Total Purchase</th>     
        </tr>
    </thead>
    <tbody>         
    <?php
    include("connection.php");

    $query ="SELECT s.*, s.student_id, s.student_email, u.student_email, b.payer_email,
        COUNT(u.student_email) AS 'uploadCount',
        SUM(u.price) AS 'uploadTotal',

        COUNT(b.payer_email) AS 'buyCount',
        SUM(b.payment_amount) AS 'buyTotal'

        FROM students s

        LEFT JOIN academic_work u ON u.student_email = s.student_email
        LEFT JOIN orders b ON b.payer_email = s.student_email

        GROUP BY s.student_id
        ORDER BY s.student_id DESC
    ";

    $run = mysqli_query($con, $query) or die(mysqli_error($con));
    ?>
    <tr>    
    <?php
    while ($row=mysqli_fetch_array($run)) 
        $student_id=$row['0'];
        $student_first_name=$row[1];
        $student_last_name=$row[2];
        $student_email=$row[3];
        $student_password=$row[4];
        $student_status=$row[5];
        $student_time=$row[6];
        $uploadCount = $row['uploadCount'];
        $buyCount = $row['buyCount'];
        $uploadTotal = $row['uploadTotal'];
        $buyTotal = $row['buyTotal'];   

        $query1 ="SELECT ss.*, ss.student_id, ss.student_email, p.email,
            COUNT(p.email) AS 'purchaseCount',
            SUM(p.payment_amount) AS 'purchaseTotal'

            FROM students ss

            LEFT JOIN orders p ON p.email = ss.student_email

            GROUP BY ss.student_id
        ";

        $run1 = mysqli_query($con, $query1) or die(mysqli_error($con));

        while ($row1=mysqli_fetch_array($run1)) 
            $purchaseCount = $row1['purchaseCount'];
            $purchaseTotal = $row1['purchaseTotal'];
            ?>
                <td><?php echo $student_first_name; ?></td>
                <td><?php echo $student_last_name; ?></td>
                <td><a href="academic_work_add.php?add_academic_work=<?php echo $student_id; ?>" style="text-decoration:none;"><?php echo $student_email; ?></a></td>
                <td><?php echo $student_status; ?></td>
                <td><?php echo $student_time; ?></td>
                <td><?php if($uploadCount == 0)  echo 0;  else  echo $uploadCount; ?></td>
                <td><?php if($uploadTotal == 0)  echo 0;  else  echo $uploadTotal; ?></td>
                <td><?php if($buyCount == 0)  echo 0;  else  echo $buyCount; ?></td>
                <td><?php if($buyTotal == 0)  echo 0;  else  echo $buyTotal; ?></td>

                <td><?php if($purchaseCount == 0)  echo 0;  else  echo $purchaseCount; ?></td>
                <td><?php if($purchaseTotal == 0)  echo 0;  else  echo $purchaseTotal; ?></td>
            </tr>
        <?php
        
    
    ?>
    </tbody>
</table>

提前致谢!

【问题讨论】:

你的问题没有问题。 @GordonLinoff .. 我的问题是执行一次记录,而不是重复它 @chris85...谢谢它的工作...如何为你的答案投票?谢谢 【参考方案1】:

您的$query1 在每次迭代时循环遍历表的所有行。使用 where 子句,然后它将返回您想要的 1 行。使用 $row 的 id 来定位正确的行。您应该对其进行参数化,这样您就不会接受 SQL 注入 (https://security.stackexchange.com/questions/146595/second-order-sql-injection-protection)。

这也可能在 1 个查询中完成,循环查询通常是不正确的实现。

【讨论】:

以上是关于在php中的多个while循环中列重复(ID总数)时间的主要内容,如果未能解决你的问题,请参考以下文章

while循环php中的最后一个元素[重复]

forEach函数中的while循环[重复]

While 循环 PHP 中的会话

从多个表中提取时 PHP while 循环和 if 语句问题

PHP while 循环

PHP while 循环