php从数据库输出到html表

时间:2013-01-26 09:26:58

标签: php html mysql database output

我的数据库中有表条目,其结构为:

id | card | event | time | day | hm
  • > id - 是每个条目的唯一ID。
  • > - 是号码。
  • > 事件 - 是数字(0,1,2或3)
  • > 时间 - 是mysql_timestamp
  • > - 是添加条目的日期(日期(“​​j”,时间())
  • > 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;";

输出条件: table必须至少有一行一天(1月31行)。  如果当天(1-31)没有条目,则行必须为:       如果日行只有两个条目必须是:

<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       |
...

请帮助我们,抱歉犯错,英语不是我的母语。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您想要对输出进行分组。构建组的标准是日期。一种方法是在循环之前定义变量,在该循环中存储最后处理的条目的日期。在输出条目之前,检查条目的日期是否与此变量中的日期相同...然后您仍然在一个组中,并且应该以不同的方式输出。

由于你的特殊输出格式,在你的情况下可能有点难以实现。首先循环查询结果并将条目存储在多维数组中可能更容易,其中日期是第一级的键,在下一级中存储与此日期相关的所有条目。所以你得到:

array (
   'xxxx-xx-xx' => array(entry1, entry2, entry3),
   'yyyy-yy-yy' => array(entry1),
   ...
)

然后,您可以对此数组执行另一个循环,并使用if (count($array[$currentKey]) == 1)检查此日期是否只有一个事件或更多。

答案 1 :(得分:0)

在sql和GROUP_CONCAT foreach循环

中使用explode
$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>';
    }
}