Почему мои данные заполняются дважды в таблицах, а хранятся в базе данных только один раз? - PullRequest
0 голосов
/ 24 апреля 2018

Итак, моя таблица показывает одну и ту же строку данных дважды. Однако в базе данных он хранится только один раз. Я думаю, что может быть проблема с циклом 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>";            

?>

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Похоже, вы пропустили закрытие 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>";            

?>
0 голосов
/ 24 апреля 2018

tasks LEFT JOIN вызов ON tasks.task = challenge.challenge Сначала вы выполняете левое соединение, чтобы подтвердить, что у вас нет нескольких записей одного первичного ключа в вашем отношениистол.

0 голосов
/ 24 апреля 2018

Используйте fetchAll() и foreach:

$results = $query->fetchAll();

foreach ($results as $result) {
 //etc
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...