我有一个MySql表,我保存了所有工人姓名和工作人员必须工作的日期。我想显示一个列表,其中包含当月的所有日期以及必须在与其对应的那一天工作的工作人员姓名。例如:
二月
等。
这是我在PHP中的代码,但循环不起作用。我只是从1到30得到一个列表,但它没有显示数据库中的数据。如果我在没有(while($ n< 31))的情况下运行循环,我从数据库中获取所有记录,但我想在对应的那天显示名称。
<?php
mysql_select_db($database_nineras, $nineras);
$query_res = sprintf("SELECT res_id, res_dateini, res_datefin, res_name FROM reservas ORDER BY res_dateini DESC");
$reservas = mysql_query($query_res, $nineras) or die(mysql_error());
$rreser = mysql_fetch_assoc($reservas);
$treser = mysql_num_rows($reservas);
$n = 1;
while ($n < 31) {
do {
++$n;
if ($n == date('d', strtotime($rreser['res_dateini']))) {
echo $n . ' - ' . $rreser['res_name'];
}
else {
echo $n;
}
} while ($rreser = mysql_fetch_assoc($reservas));
}
?>
答案 0 :(得分:1)
代码的问题是while
循环正在获取查询返回的所有行。所以,当你进入date('j', ...)
循环的第二次迭代时,没有什么可以获取。
不是每次通过循环从数据库中获取行,而是可以获取它们一次并将它们放入索引为日期数的数组中。然后,您可以遍历日期并打印每天的所有行。
使用DAY(res_dateini)
获取没有前导零的日期。或者更改SQL查询以返回$results = array();
$reservas = mysql_query($query_res, $nineras) or die(mysql_error());
while ($rreser = mysql_fetch_assoc($reservas)) {
$d = date('j', strtotime($rreser['res_dateini'])));
$results[$d][] = $rreser['res_name'];
}
for ($day = 1; $day <= 31; $day++) {
echo "$day - " . (isset($results[$day]) ? implode(", ", $results[$day]) : "") . "<br>\n";
}
。
{{1}}