-2

レコードのリストを取得し、各レコードは質問/回答/タイムスタンプです。

基本的な PHP レポートを作成しました。

<?php
$con = mysql_connect("localhost", "login", "pass");
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("db", $con);

$result = mysql_query(" SELECT *
                FROM  `experiment` 
                where userid = 73");

while ($row = mysql_fetch_array($result)) {
    echo "question " . $row['question'] . "answer " . $row['answer'] .
         "time " . $row['time'] . "stamp " . $row['createdAt'] . "<br>";
}

createdAt の前の行と createdAt の後の行を比較する方法が必要です。

2 つの行の差が 2 分より大きい場合、「警告」が表示されます。

4

2 に答える 2

1

私はあなたに代わっていくつかのことを想定します。これにより回答の価値が変わる可能性がありますが、現時点で回答を実行可能にするために必要な情報を提供していないだけです。

データレコードをループしていると仮定します。複数の行が表示されていることを示すことで、これを意味します。SQLクエリは1行のデータのみを取得します。代わりに、実際にはレコードセット全体を取得したと想定します。それ以外の場合は、データ構造を調べて設計を選択する必要があるためです。私はまたuserid、テーブルでどのように使用されるかについても仮定しているので、それが私の個人的な偏見です。

レコードセットが収集されると、それらを操作できます。ここでは古代のmysql_*方法を使用しています。phpが5.2.7以降で利用できるPDO方法論を読み、まだ持っていない場合はphpバージョンのアップグレードを検討することをお勧めします。

操作にはさまざまな形式があります。

$previousRecord = 0;
foreach ($recordSet as $index=>$record){
    $recordSet[$index]['warningTime'] = FALSE;
    if ($previousRecord){
        if (($record['createdAt']-$previousRecord) > 120){
            $recordSet[$index]['warningTime'] = TRUE;
        }
    }
    $previousRecord = $record['createdAt'];
    // Other data manipulation logic for page presentation
}

これにより、いつでも表示できるデータセットに警告が挿入されます。私は保守性のために機能を分離することを好みます。データベースの呼び出し、データの抽出/フォーマット、データの表示。これにより、将来の変更がはるかに簡単になり、コードの移植性も可能になります。これはコードに含まれていません。つまり、このようなことをもう一度行うと、車輪の再発明を行うことになります。

于 2012-05-03T13:34:09.947 に答える
0
$createdAt = null;
while($row = mysql_fetch_array($result)) :
    // initialise on first run
    if ($createdAt === null) :
        $createdAt = $row['createdAt'];
    endif;
    // now $createdAt is the value of the last row... if so, echo warning, else echo nothing
    echo checkCreatedIsOlderThanTwoMinutes($createdAt, $row['createdAt']) === true ? "WARNING!" : "";
    echo "question ". $row['question']. "answer ". $row['answer']. "time ".$row['time']."stamp ". $row['createdAt']."<br>";

endwhile;

私はあなたのcreatedAtのフォーマットがどのように見えるか見当がつかないので、この疑似関数を使用します:

function checkCreatedIsOlderThanTwoMinutes($oldCreatedAt, $newCreatedAd)
{
     // check that stuff
}

お役に立てば幸いです。

于 2012-05-03T13:21:59.760 に答える