Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Посчитать количество выбранных записей.


Автор: andro_id 5.5.2007, 17:06
Есть код, который делает выборку из БД, и выводит результат в таблицу. Как пронумеровать строки в результирующей таблице, начиная с 1?
Искал-искал на форуме, нашел, что надо использовать COUNT() и mysql_num_rows, но как это прикрутить сюда, так и не понял.
Код:
Код

<table border="1" width="100%" align="center">
<tr>
<th>№</th>
<th>Тип устройства</th>
<th>Модель устройства</th>
<th>Тип</th>
<th>Диагональ</th>
<th>Серийный номер</th>
<th>Место установки</th>
<th>Дата получения</th>
<th>Статус</th>
<th>Дата списания</th>
<th>Причина списания</th>
<th>Комментарии</th>
</tr>

<?php
$query = "SELECT * FROM " . TABLE_INVENTORY . " WHERE equipment_type = '" . $_POST['equip_type'] . "' AND device_type = '" . $_POST['device_type'] . "' ORDER BY device_model";
$inventory = mysql_query($query);
while($query_data = mysql_fetch_array($inventory)) {
    $id = $query_data["id"];
    $query = "SELECT * FROM " . TABLE_INVENTORY . " WHERE id = '$id'";
          $devices = mysql_query($query);
          while($query_data = mysql_fetch_array($devices)) {
            $device_type = $query_data["device_type"];
            $device_model = $query_data["device_model"];
            $monitor_type = $query_data["monitor_type"];
            $monitor_diagonal = $query_data["monitor_diagonal"];
            $device_serial = $query_data["device_serial"];
            $device_location = $query_data["device_location"];
            $device_date_receive = $query_data["device_date_receive"];
            $device_status = $query_data["device_status"];
            $device_date_spisan = $query_data["device_date_spisan"];
            $device_spisan_reason = $query_data["device_spisan_reason"];
            $device_comment = $query_data["device_comment"];
        }
          echo "<TR>\n";
          echo "<TD ALIGN=\"CENTER\">$num</TD>\n";          //здесь должен быть порядковый номер строки
          echo "<TD ALIGN=\"CENTER\">$device_type</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_model</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$monitor_type</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$monitor_diagonal</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_serial</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_location</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_date_receive</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_status</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_date_spisan</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_spisan_reason</TD>\n";
          echo "<TD ALIGN=\"CENTER\">$device_comment</TD>\n";
    }
?>
</TABLE><BR>
</body>
</html>

Автор: Всемогущий 5.5.2007, 17:26
Код

  echo "<TD ALIGN=\"CENTER\">".++$iz."</TD>\n";          //здесь должен быть порядковый номер строки   


Добавлено через 1 минуту и 33 секунды
только есть одна проблемма : ваш код обрабатывает лишь одну строку из результата mysql

Автор: SelenIT 5.5.2007, 17:38
Цитата(andro_id @  5.5.2007,  17:06 Найти цитируемый пост)
COUNT() и mysql_num_rows

здесь использовать не надо smile

Равно как и второй запрос в цикле. Что это вообще за ужас? Когда-нибудь база не простит такого насилия над собой...
Код

<table border="1" width="100%" align="center">
   <tr>
      <th>№</th>
      <th>Тип устройства</th>
      <th>Модель устройства</th>
      <th>Тип</th>
      <th>Диагональ</th>
      <th>Серийный номер</th>
      <th>Место установки</th>
      <th>Дата получения</th>
      <th>Статус</th>
      <th>Дата списания</th>
      <th>Причина списания</th>
      <th>Комментарии</th>
   </tr>
<?php
$query = "SELECT * FROM " . TABLE_INVENTORY . " WHERE equipment_type = '" . $_POST['equip_type'] . "' AND device_type = '" . $_POST['device_type'] . "' ORDER BY device_model";
$inventory = mysql_query($query);
$num = 1;
while($query_data = mysql_fetch_array($inventory)) {
?><tr>
     <td><?=$num++; /* вся "магия" здесь */ ?></td>
     <td><?=$query_data["device_type"]; ?></td>
     <td><?=$query_data["device_model"]; ?></td>
     <td><?=$query_data["monitor_type"]; ?></td>
     <td><?=$query_data["monitor_diagonal"]; ?></td>
     <td><?=$query_data["device_serial"]; ?></td>
     <td><?=$query_data["device_location"]; ?></td>
     <td><?=$query_data["device_date_receive"]; ?></td>
     <td><?=$query_data["device_status"]; ?></td>
     <td><?=$query_data["device_date_spisan"]; ?></td>
     <td><?=$query_data["device_spisan_reason"]; ?></td>
     <td><?=$query_data["device_comment"]; ?>
</tr><?
}
?>
</TABLE><BR>
</body>
</html>

Автор: andro_id 5.5.2007, 18:48
Да уж. Я действительно написал ужас. Просто я только учусь. Спасибо, что поправили. Всё работает.

А есть ли принципиальная разница между "<?php" и "<?=" , или просто так короче?

Автор: SelenIT 5.5.2007, 19:02
<?=... - это сокращенная запись для <?php echo ...

Она может не работать, если в php.ini отключена опция short_open_tag (очень редко такое делается, например, для совместимости с XML-файлами - на практике я не сталкивался). Насколько мне известно, это единственное отличие и ограничение такой записи.

Автор: andro_id 5.5.2007, 20:41
Спасибо всем. Будем учить дальше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)