PHP цикл while для получения значений из базы данных mysql, если она равна значению $ i - PullRequest
2 голосов
/ 20 июня 2011

Я пытаюсь получить значение для вставки в таблицу на веб-странице, если значение равно $ i.

$ i начинается с числа и уменьшается в каждом цикле. я могу заставить его работать, но он выводит несколько строк для каждого $ i, эквивалентного результатам в таблице

Я переработал код, используя обратную связь от всех, чтобы получить это.

Echo "<tr><th colspan='3'><center>$rackname</th> </tr>" ;
    for ($i=$RUtotal; $i > 0; $i--)
        { 
            echo" <tr class='rackbg'><td class='i'><center>$i</td>" ;
            $sql1 = "SELECT racks.rackID, racks.rackname, devices.deviceID, devices.deviceName, racks.rackRU, devices.deviceRU, devices.RUcount
                    FROM racks LEFT JOIN devices ON racks.rackID = devices.rackID
                    WHERE devices.rackID = '$rackID'";
            $query1 = mysql_query($sql1);

            while ($row = mysql_fetch_assoc($query1))
                {

                    $deviceru = $row['deviceRU'];
                    $deviceID = $row['deviceID'];
                    $device = $row['deviceName'];
                    $deviceRUC = $row['RUcount'];

                    if ($deviceru == $i) 
                        { 
                            echo '<td class="device" rowspan='.$deviceRUC.'><a onclick=window.location="/devices.php?id='.$deviceID.'">'.$device.'</a></td><td rowspan='.$deviceRUC.'></td></tr>';
                        }
                    else
                        {
                            ;
                        }

                } 
        }

    Echo "<tr class='rackb'><th colspan='3'>a</th></tr> " ;

Это работает в некоторой степени (рисунок 1), но когда я добавляю echo "" к оператору else, он отображает все неправильно (фото 2)

Любая помощь будет принята с благодарностью

Picture1 - http://imageshack.us/photo/my-images/263/examplewq.png/

Picture2 - http://imageshack.us/photo/my-images/269/example2jp.png/

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

Я не совсем понимаю, что вы пытаетесь сделать, но мне кажется, что вы хотите, чтобы все элементы из стоек были объединены с соответствующим устройством и отображались в порядке deviceRU.Помогает ли это:

echo "<tr><th colspan='3'><center><b>$rackname</th></tr>" ;

$sql1 = "SELECT racks.rackID, racks.rackname, devices.deviceID, devices.deviceName, racks.rackRU, devices.deviceRU, devices.RUcount
   FROM racks LEFT JOIN devices ON racks.rackID = devices.rackID
   WHERE racks.rackID = '$rackID' AND devices.deviceRU <= ".intval($RUtotal)."
   ORDER BY devices.deviceRU;"
$query1 = mysql_query($sql1);
while ($row = mysql_fetch_array($query1))
    {
    $deviceru = $row['deviceRU'];
    $deviceID = $row['deviceID'];
    $device = $row['deviceName'];
    $deviceRUC = $row['RUcount'];

    echo'<tr class="rackbg"><td class="i">'.$i.'</td><td class="device"><a href="/devices.php?id='.$deviceID.'">'.$device.'</a></td><td></td></tr>';
}

Я использовал LEFT (внутренний) JOIN в SQL вместо внешнего соединения, которое было раньше, поскольку оно будет возвращать меньше результатов и может решить вашу проблему.Я упорядочил результаты по устройству deviceRU и возвратил результаты, у которых deviceRU меньше или равно $ RUtotal (как я думаю, пример показывал).

Я также удалил теги, их следует заменитьс помощью CSS для центрирования либо всех элементов td, либо центрирования class = "device" и class = "i", например:

.device, .i {
     text-align: center;
 }

Я также поменял ваш abc на abc, который является правильным форматом для ссылки.

Не могли бы вы описать больше контекста, поскольку трудно понять ваше намерение из вашего поста.

Мат

2 голосов
/ 21 июня 2011

Как сказал Питс, вам не нужен вложенный цикл.Вам нужно что-то вроде:

$i = $RUtotal;
// ...
while ($row = mysql_fetch_array($query1)) {
    // ...
    if ($deviceru == $i) {
        // ...
    } else {
        // ...
    }
    // ...
    $i--;
}
1 голос
/ 20 июня 2011

Это цикл $ i раз внутри внешнего цикла while.Это означает, что вы повторяете таблицу снова и снова.

Я предлагаю вам удалить внешний цикл while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...