PHP查询循环
在创建表时,我很难找到循环值的正确方法。我有一个包含日期、ID和其他数据的列表。我需要在桌子上循环,看起来像: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
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认真对待答案中的标记。通常将问题/答案格式化为纯文本,两个返回表示段落中断,并查看编辑框下方的预览。我刚刚编辑了答案以删除所有这些内容-一旦获得批准,您将看到更新版本。