从数据库到html表的php输出

从数据库到html表的php输出,php,html,mysql,database,output,Php,Html,Mysql,Database,Output,我的数据库中有具有以下结构的表项: id | card | event | time | day | hm >id-是每个条目的唯一id。 >卡片-是号码。 >事件-是数字0、1、2或3 >时间-是mysql\u时间戳 >day-添加条目时的月份日期j,时间 >嗯-其他一些信息。。。 我想在html表格中显示一个月的所有条目。 现在我使用这个简单的查询: $sql = "SELECT event, time, day, hm FROM `entries` WHERE card=$card_t

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

id | card | event | time | day | hm
>id-是每个条目的唯一id。 >卡片-是号码。 >事件-是数字0、1、2或3 >时间-是mysql\u时间戳 >day-添加条目时的月份日期j,时间 >嗯-其他一些信息。。。 我想在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行。 如果第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>
但我现在得到的是31行的输出,如果一天的行数超过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并分解每个循环

$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>';
    }
}
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>';
    }
}