【问题标题】:Why is my data populating twice in the tables but it is only stored once in the database?为什么我的数据在表中填充了两次,但在数据库中只存储了一次?
【发布时间】:2018-10-04 15:52:15
【问题描述】:

所以我的表格两次显示同一行数据。但是在数据库中它只存储一次。我认为while循环可能存在问题。我正在将数据插入到数据库中,该数据库在数据库中存储良好,但是当我将其打印到屏幕上时,它会重复相同的值两次。

<?php
include ("dbConnect.php");

$query = $db->prepare("select * from tasks LEFT JOIN challenge ON tasks.task = challenge.challenge where start_date <= NOW() and end_date >= NOW() ORDER BY challenge.achievement DESC limit 8");
$query->execute();
// Display search result
         if (!$query->rowCount() == 0) {

                echo "<table id=\"example\" style=\"font-family:arial;color:#ffffff;\" class=\"table table-striped table-bordered\" style=\"width:100%\">"; 
                echo "<thead><tr>
                <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Customer ID</th>
                <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Name</th>                
                <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Score</th>
                <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Challenge</th>
                <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Rank</th>
            </tr></thead><tbody>";
            $position = 1; 
            while ($results = $query->fetch()) {


                $count = count($results);

                echo "<tr><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";            
                echo $results['cust_id'];
                echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                echo $results['forename'];
                echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                echo $results['achievement'];
                echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                echo $results['challenge'];
                echo "<td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                echo "Position: $position";
                $position = $position+1;

                } 
}       

                echo '</td></tr></tbody>';              

                echo "</table>";            

?>

【问题讨论】:

  • 您应该首先验证您的查询是否返回了您期望的行。
  • 在不知道表的架构是什么的情况下,您可以尝试 DISTINCT/GROUP BY。

标签: php html sql loops while-loop


【解决方案1】:

tasks LEFT JOIN challenge ON tasks.task = challenge.challenge 您正在执行左连接,首先确认您的关系表中没有多个相同主键的条目

【讨论】:

    【解决方案2】:

    看起来您在循环中缺少关闭的 td 和 tr 。但是在您使用 LEFT JOIN 的查询中,您将在每个挑战中获得尽可能多的任务。因此,如果您的任务 1 有 2 个挑战,它将显示任务 1、2 次。每个挑战 1 个。希望这可以帮助。 下面我只是将您关闭的 TD TR 移到循环中。

     <?php
    include ("dbConnect.php");
    
    $query = $db->prepare("select * from tasks LEFT JOIN challenge ON tasks.task = challenge.challenge where start_date <= NOW() and end_date >= NOW() ORDER BY challenge.achievement DESC limit 8");
    $query->execute();
    // Display search result
             if (!$query->rowCount() == 0) {
    
                    echo "<table id=\"example\" style=\"font-family:arial;color:#ffffff;\" class=\"table table-striped table-bordered\" style=\"width:100%\">"; 
                    echo "<thead><tr>
                    <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Customer ID</th>
                    <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Name</th>                
                    <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Score</th>
                    <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Challenge</th>
                    <th style=\"border-style:solid;border-width:3px;border-color:#575757;background:#575757;\">Rank</th>
                </tr></thead><tbody>";
                $position = 1; 
                while ($results = $query->fetch()) {
    
    
                    $count = count($results);
    
                    echo "<tr><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";            
                    echo $results['cust_id'];
                    echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                    echo $results['forename'];
                    echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                    echo $results['achievement'];
                    echo "</td><td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                    echo $results['challenge'];
                    echo "<td style=\"border-style:solid;border-width:1px;border-color:#D3D3D3;\">";
                    echo "Position: $position";
                    $position = $position+1;
                    echo '</td></tr></tbody>';              
                    } 
    }       
                echo '</tbody>';              
                echo "</table>";            
    
    ?>
    

    【讨论】:

    • 贾斯汀谢谢你!我有两个任务设置为相同的值
    【解决方案3】:

    使用fetchAll()foreach

    $results = $query->fetchAll();
    
    foreach ($results as $result) {
     //etc
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-20
      • 2018-07-28
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多