Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP查询循环_Php_Loops - Fatal编程技术网

PHP查询循环

PHP查询循环,php,loops,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

在创建表时,我很难找到循环值的正确方法。我有一个包含日期、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();
?>
$weekNum=intval((intval($row_rests['day'))+6)/7);
你知道吗
我一直在尝试在循环时填充数组。如果周数已在数组中,则跳过该条目。问题是,有时会有5个条目,有时为0或介于两者之间的任何位置

我需要在每个单元格中获取一些文本,但我还没有找到正确的循环组合(我想我应该总是循环5次)和数组写入。我已经尝试了continue;和break;以及在不同位置重置数组的所有组合

上面的代码在一个循环中,这个循环通过rest_ID,工作得很好。正是这个子循环难住了我


想法?

你意识到,你不需要使用PHP/OOP循环来实现这一点


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

U意识到,您不需要使用PHP/OOP循环来完成此操作

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;
    }
}
查看表和要获得的结果,只需使用SQL中的GROUPBY子句对查询结果进行分组。在该查询中,您可以重命名属性/列名并对其设置条件

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个标准值初始化该行,然后将当前行设置为其值。如果该行已存在,则只将正确的wk设置为正确的值


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

感谢您的回复!这是我在这里的第一篇文章,因此我在格式化方面有点困难。 我在发布后很快就解决了…当然

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


谢谢你的帮助!

谢谢你的回复!这是我在这里的第一篇帖子,所以我对格式有点纠结。 我在发布后很快就解决了…当然

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


感谢您的帮助!

Don,您正在努力解决答案中的标记问题。将问题/答案格式化为纯文本,两个返回表示段落中断,并查看编辑框下方的预览。我刚刚编辑了答案以删除所有这些内容-一旦获得批准,您将看到更新版本。Don,您正在尝试不这样做o认真对待答案中的标记。通常将问题/答案格式化为纯文本,两个返回表示段落中断,并查看编辑框下方的预览。我刚刚编辑了答案以删除所有这些内容-一旦获得批准,您将看到更新版本。