Зацикливание запросов PHP - PullRequest
       2

Зацикливание запросов PHP

1 голос
/ 05 сентября 2011

У меня проблемы с поиском правильного способа циклического перебора значений при создании таблицы.У меня есть таблица со списком дат, идентификаторов и других данных.Мне нужно перебрать таблицу, которая выглядит следующим образом:

rest_id    date          galls
133        2011-06-01    75 
139        2011-06-12    60 
133        2011-06-13    85 
139        2011-06-22    25 
133        2011-06-30    80

И в итоге:

  id     week 1    week 2   week 3   week 4   week 5
  133    75        85       wk3      4        80
  139    wk1       60       wk3      25       wk5

Я перепробовал много вариантов, но не могу получить правильный цикл.Я играл с этим типом петли в течение нескольких недель и не могу его получить.

У меня есть процедура, которая получает неделю месяца:

$weekNum = intval((intval($row_rests['day'])+6)/7);

do {  ?>
  <td><?php if($weekNum == 1 AND !in_array('1',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '1'); continue;} else echo '1'; array_push($weeklist, '1'); ?></td>
  <td><?php if($weekNum == 2 AND !in_array('2',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '2'); continue;} else echo '2'; array_push($weeklist, '2'); ?></td>
  <td><?php if($weekNum == 3 AND !in_array('3',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '3'); continue;} else echo '3'; array_push($weeklist, '3'); ?></td>
  <td><?php if($weekNum == 4 AND !in_array('4',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '4'); continue;} else echo '4'; array_push($weeklist, '4'); ?></td>
  <td><?php if($weekNum == 5 AND !in_array('5',$weeklist)) {echo $row_rests['galls']; array_push($weeklist, '5'); continue;} else echo '5'; array_push($weeklist, '5'); ?></td>
<?php
} while ($row_rests = mysql_fetch_assoc($rests));
$weeklist = array();
?>

Я пыталсязаполнить массив, как я цикл.Если номер недели уже есть в массиве, пропустите эту запись.Проблема в том, что иногда будет 5 записей, иногда 0 или где-то между ними.

Мне нужно получить НЕКОТОРЫЙ текст в каждой ячейке, но я не нашел правильную комбинацию циклов (я думаю, что я должен повторять цикл 5 раз) и запись в массив.Я перепробовал все комбинации продолжения;и сломаться;и сброс массива в разных местах.

Приведенный выше код находится в цикле, который проходит через rest_ids, и это прекрасно работает.Это просто подзаголовок, который ставит меня в тупик.

Идеи?

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

Вы понимаете, что для этого вам не нужно использовать циклы PHP / OOP ..

Глядя на свою таблицу и результат, который вы хотите получить, все, что вам нужно сделать, это сгруппировать результат запросаиспользуя предложение GROUPBY в SQL.В этом же запросе вы можете переименовать имя атрибута / столбца и наложить на него условия.

0 голосов
/ 08 сентября 2011

Спасибо за ответы!Это был мой первый пост, поэтому я немного постарался с форматированием.Я решил это вскоре после того, как отправил ... конечно.

<?php $i = 0;
        $y = 0;
     while ($i < 5): 
          $weekNum = intval((intval($row_rests['day'])+6)/7);
    ?>
      <td align="center"><php if(intval($weekNum) == intval($i+1)) {echo $row_rests['galls'];} else echo "-"; ?></td>
      <?php  
         $i++;
         if ($weekNum == $i)
           $y++;
           if($totalRows_rests = 0){
               $y = 0;
               }
               else
               { $y = $y;}
           mysql_data_seek ($rests, $y);
           $row_rests = mysql_fetch_assoc($rests);
    endwhile; ?>

Спасибо за помощь!

0 голосов
/ 05 сентября 2011
function getWeekOfMonth($date) {
    return intval((intval(substr($date,8))+6)/7); //Took just your function
}


$rows = array();
$sql = "SELECT * FROM table";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $found = false;
    foreach ($rows as &$savedRow) {
        if ($savedRow['id'] == $row['id']) {
            $found = true;
            $savedRow['wk'.getWeekOfMonth($row['date'])] = $row['galls'];
            break;
        }
    }
    if (!$found) {
        $tempRow = array(
            'id' => $row['id'],
            'wk1' => 'wk1',
            'wk2' => 'wk2',
            'wk3' => 'wk3',
            'wk4' => 'wk4',
            'wk5' => 'wk5'
        );
        $tempRow['wk'.getWeekOfMonth($row['date'])] = $row['galls'];

        $rows[] = $tempRow;
    }
}

Как видите, сначала выглядит, существует ли уже строка для идентификатора.Если нет, он инициализирует строку с ее 5 стандартными значениями, а затем устанавливает текущую строку в ее значение.Если он уже существует, он просто устанавливает правильный wk на правильное значение.

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