0

毎日の情報を含むテーブルがあります:

idDya | date | startHour | endHour | totalHours | name
-------------------------------------------------------
1       05/01   12:00       16:00       4         John
2       05/01   12:00       16:00       4         Marko
3       05/02   12:00       17:00       3         John
4       05/02   12:00       17:00       3         Peter
5       05/03   12:50       18:00       5         Peter

そして私は動的テーブルを持っています:

<?php

    $sql = " SELECT * FROM days "; 

    $result = mysql_query($sql);

    while ($row = mysql_fetch_assoc($result)) {

    echo "<table  width='435' border='1' cborder='1' cellpadding='2' cellspacing='0' bordercolor='#666666' class='boldtable'>

    <tr>
    <td>".$row['idDya']."</td>
    <td>".$row['date ']."</td>
    <td>".$row['totalHours']."</td>
    <td>".$row['name']."</td>
    </tr>

    </table>";

    }
?>

質問: 「どのように表を書式設定すれば、動的な表を作成できますが、各セルはその日付の情報を組み合わせることができます」。

day        schedule
--------------------------------

05/01 |     John    12:00 -16:00     
            Marko   12:00 -16:00

--------------------------------

05/02 |     John    12:00 -16:00     
            Peter   12:00 -16:00

--------------------------------

etc...
4

1 に答える 1

0

GROUP_CONCAT()MySql 側で使用して、1 日あたりの詳細を一度にパックして取得しexplode()、ページのレンダリング中に php 側でさらに詳細を取得すると便利な場合があります。

SELECT date, GROUP_CONCAT(CONCAT_WS('|', name, startHour, endHour) ORDER BY name) schedule
  FROM days
 GROUP BY date

出力例:

+------------+------------------------------------------------ ------------+
| | 日付 | スケジュール |
+------------+------------------------------------------------ ------------+
| | 2013-05-01 | ジョン|12:00:00|16:00:00,マルコ|12:00:00|16:00:00 |
| | 2013-05-02 | ジョン|12:00:00|17:00:00,ピーター|12:00:00|17:00:00 |
| | 2013-05-03 | ピーター|12:50:00|18:00:00 |
+------------+------------------------------------------------ ------------+

これがSQLFiddleのデモです


PDOを使用してphpで処理する方法は次のとおりです

<?php
$db = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$sql = "SELECT date, GROUP_CONCAT(CONCAT_WS('|', name, startHour, endHour) ORDER BY name) schedule
          FROM days
         GROUP BY date";

$query = $db->prepare($sql);
$query->execute();
$rows = $query->fetchall(PDO::FETCH_ASSOC);

$query = null;
$db = null;
?>

<table width='435' border='1' cborder='1' cellpadding='2' cellspacing='0' bordercolor='#666666' class='boldtable'>
    <thead>
        <tr>
            <th>Day</th>
            <th>Schedule</th>
        </tr>
    </thead>
    <tbody>
<?php
    foreach($rows as $row) {
        echo "<tr>
              <td>{$row['date']}</td><td>";
        $schedule = explode(',', $row['schedule']);
        foreach($schedule as $details) {
            list($name, $start_hour, $end_hour) = explode('|', $details);
            echo "$name $start_hour-$end_hour<br>";
        }
        echo "</td></tr>";
    }
?>        
    </tbody>
</table>

出力例:

サンプル出力

于 2013-07-01T18:19:25.657 に答える