繁体   English   中英

php从数据库输出到html表

[英]php output from the database to html table

我的数据库中的表条目具有以下结构:

id | card | event | time | day | hm
  • > id-是每个条目的唯一ID。
  • > -是数字。
  • > 事件 -是数字(0、1、2或3)
  • > 时间 -是mysql_timestamp
  • > -是添加条目的月份中的某天(date(“ j”,time())
  • > 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_CONCATexplode 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM