簡體   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