-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 分钟,则事物应回显“警告”。

4

2 回答 2

1

我会代表你假设几件事情。这可能会改变答案的价值,但您根本没有提供必要的信息来使答案在这一点上可行。

我将假设您正在遍历数据记录。您通过声明显示多行来暗示这一点。您的 SQL 查询仅获取一行的数据。我假设您实际上已经获得了整个记录集。因为否则,需要检查数据结构的设计选择。我也在做一个关于如何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 回答