0

次の表があります-

S.No. (Auto Increment, Primary Key)
Timestamp (Records date in yyyy-mm-dd format)
type (Records the type of document Ex. 1,2,3,etc.)
Number (Records the serial number of a particular type of document)

ここで、タイムスタンプでデータを並べ替えるテーブルを生成したいと考えています。に基づいてtype、いくつかの列をレポートの左側に表示し、いくつかの列を右側に表示したいと考えています。したがって、結果セットを最初にタイムスタンプで並べ替え、次にタイプで並べ替えるようにします。左側に 1,2,3、右側に 4,5,6 が必要だとします。したがって、結果セットに必要なのは、左側と右側の行が交互にある必要があるということです。元。

Timestamp                     Type 
2012-01-01                      1
2012-01-01                      4
2012-01-01                      1
2012-01-01                      4
2012-01-01                      1
2012-01-01                      5
2012-01-01                      1
2012-01-01                      6
2012-01-01                      2
2012-01-01                      2
2012-01-01                      2

私はこれをやろうとしましたが、望ましい結果が得られませんでした。これが私が望む最終結果です -

タイムスタンプ タイプ タイムスタンプ タイプ
2012-01-01 1 2012-01-01 4
2012-01-01 1 2012-01-01 4
2012-01-01 1
2012-01-02 2 2012-01-02 6
2012-01- 02 2 2012-01-02 6
                                        2012-01-03 5
                                         2012-01-03 5
                                        2012-01-03 5

4

2 に答える 2

1

結果セットを反復処理する際に、PHP によって生成されたすべての HTML コードを 2 つの変数 ( $leftHtml、 )に収集するだけであれば、並べ替える必要はありません。$rightHtml

終了したら、html 全体を一度に適切な場所にエコーします。その場合、行がどのようにソートされるかは問題ではありません (たとえば、時間でソートしたくない限り)。

注意: 列名としての「タイムスタンプ」と「タイプ」は、予約語であるため、長期的にはエラーにつながります。

疑似コード:

$left = "";
$right = "";
foreach ( $result as $row )
{
  if ( $row['type'] == '1' )
       $left .= "<p>left: " . $row['timestamp'];

  if ( $row['type'] == '2' )
       $right.= "<p>right: " . $row['timestamp'];
}

echo "<table><tr><td>" . $left . "</td><td>" . $right. "</td></tr></table>";
于 2013-06-30T15:02:39.453 に答える
0

必要に応じて、このようにクエリを実行できます。つまり、タイプが 1、2、または 3 の場合は Side = 1 (左)、それ以外の場合は Side = 2 (右) です。

SELECT 
    `S.No.`, `Timestamp`, `Type`, `Number`, 
    IF(`Type` IN (1,2,3), 1, 2) as `Side`
FROM `Table`
ORDER BY `Side`, `Timestamp`, `Type`

サイドで注文したので、これを行うことができます:

<?php
$leftSide = true;
echo '<div class="left-side">';
while ($row = mysqli_fetch_assoc($result)) {
    if ($leftSide && $row['Side'] == 2) {
        // We've hit our first right side row so close the left side div and 
        // start theright side div
        echo '</div><div class="right-side">';
        $leftSide = false;
    }

    // Do something with the row data here
}
echo '</div>';
于 2013-06-30T15:10:00.427 に答える