[英]php output from the database to html table
我的数据库中的表条目具有以下结构:
id | card | event | time | day | hm
我想在html表中显示一个月的所有条目。 现在,我使用以下简单查询:
$sql = "SELECT event, time, day, hm FROM `entries`
WHERE card=$card_t
AND YEAR(time)=$year
AND MONTH(time)=$month
AND event IN (0,1,3)
ORDER BY `time` ASC;";
输出条件:表每天必须至少有一行(一月31行)。 如果day(1-31)行没有条目,则必须为:如果day行只有两个条目,则必须为:
<tr>
<td>$day_number</td>
<td>$time_of_first_event</td>
<td>$first_event</td>
<td>$time_of_last_event</td>
<td>$last_event</td>
</tr>
if there is more than two entries a day two must be (I will hide second one with jquery later):
<tr>
<td>$day_number</td>
<td>$time_of_first_event</td>
<td>$first_event</td>
<td>$time_of_last_event</td>
<td>$last_event</td>
</tr>
<tr>
<table>
<tr>
<td>$time</td>
<td>$event</td>
</tr>
</table>
</tr>
所以看起来像:
| 1 | no entry |
| 2 | no entry |
| 3 | no entry |
| 4 | time_first | event_fisrt | time_last |event_last |
| time2 | event 2 |
| time3 | event 3 |
| 5 | no entry |
...
但是我现在得到的只是31行的输出,如果某天的行数超过了该行,则该行将重复这一天并显示该天的所有行:
| 1 | no entry |
| 2 | no entry |
| 3 | no entry |
| 4 | time1 event 1 |
| 4 | time2 event 2 |
| 4 | time3 event 3 |
| 5 | no entry |
...
请帮助我,对不起,我的母语不是英语。
如果我对您的理解正确,则希望对输出进行分组。 建立小组的标准是日期。 一种方法是在循环之前定义一个变量,在该变量中存储最后处理的条目的日期。 在输出条目之前,请检查条目的日期是否与此变量中的日期相同...然后您仍在组中,并且应以不同的方式输出它。
由于您的输出格式非常特殊,在您的情况下实现该功能可能会有些困难。 首先循环查询结果,然后将条目存储在多维数组中会比较容易,在多维数组中,日期是第一级的键,而在下一级中,您将存储与该日期相关的所有条目。 这样就得到:
array (
'xxxx-xx-xx' => array(entry1, entry2, entry3),
'yyyy-yy-yy' => array(entry1),
...
)
然后,您可以对此数组进行另一个循环,并使用if (count($array[$currentKey]) == 1)
来检查该日期是否只有一个或多个事件。
在SQL中使用GROUP_CONCAT
并explode
foreach循环
$sql =
"SELECT
GROUP_CONCAT(event SEPARATOR ","), GROUP_CONCAT(time SEPARATOR ","),
day , GROUP_CONCAT(hm SEPARATOR ",") FROM `entries`
WHERE
card=$card_t
AND YEAR(time)=$year
AND MONTH(time)=$month
AND event IN (0,1,3)
GROUP BY
day
ORDER BY
`time` ASC;";
在foreach中
foreach ($entries as $entry) {
if ($entry['event'] == "") {
echo '<tr>';
echo '<td>'.$no++.'</td>';
echo '<td>No events</td>';
...................
echo </tr>';
continue;
}
$events = explode("," , $entry['event']);
if (count($events) > 0) {
// Have multiple row here
foreach($events as $event) {
........................
}
} else {
echo '<tr>';
echo '<td>'.$no++.'</td>';
echo '<td>'.$entry['event'].'</td>';
...................
echo </tr>';
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.