PHP查询循环

时间:2011-09-05 17:58:31

标签: php loops

在创建表时,我无法找到正确的循环方式。我有一个表,其中包含日期,ID和其他数据列表。我需要遍历看起来像这样的表:

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 个答案:

答案 0 :(得分:1)

你意识到,你不需要使用PHP / OOP循环来实现它......

查看您的表和您想要获得的结果,您需要做的就是使用SQL中的GROUPBY子句对查询结果进行分组。在该查询中,您可以重命名属性/列名称并在其上添加条件。

答案 1 :(得分:0)

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;
    }
}

如您所见,它首先看,如果id的行已经存在。如果不是,则使用其5个标准值初始化行,然后将当前行设置为其值。如果它已经存在,它只是将正确的值设置为正确的值。

答案 2 :(得分:0)

感谢您的回复!这是我在这里发表的第一篇文章,所以我对格式有点挣扎。 我发布后很快就解决了......当然。

<?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; ?>

感谢您的帮助!