是否有任何方法可以从查询结果pre-While循环中获取第一个结果?

时间:2015-04-19 20:10:53

标签: php mysqli

我的网站有一个由mysqli_query生成的相当大的表;该查询包含一个列'messagetime':

$result = mysqli_query($cxn, 
"
  SELECT ......., messagetime
  FROM messages 
  ORDER by messagetime 
  DESC
"
);

然后我在while循环的帮助下生成表(在php中):

echo "<table id='myTbl' class='newest' border='1'>";
echo "<th>Content</th> //etc.
echo "<tbody>";

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

    // Fill the table body here

}

echo "</tbody></table>";

没什么大惊小怪的。但是,该站点使用轮询来刷新表,我需要在表中存储查询的第一个结果的messagetime,如下所示:

echo "<table id='myTbl' class='newest".$newestTime."' border='1'>";

现在,为了捕获第一个(最新的)消息时间,我正在调整我的While循环来执行此操作:

$i = 0;
while ($row = mysqli_fetch_assoc($result)) {

     if ($i == 0) {
         echo "<table id='myTbl' class='newest".$row['messagetime']."' border='1'>";
         echo "<th>Content</th> //etc.
         echo "<tbody>";
     }

    // Fill the table here

     $i++;
}

echo "</tbody></table>";

然而,这对我来说似乎有些不好意思。有没有办法,没有子查询或联合(因为我的查询实际上是2个连接的产物,并且已经很昂贵;这种方法被描述为here),只是简单地从查询中获取第一个结果,某些东西像这样?

$result = mysqli_query($cxn, 
"
  SELECT ......., messagetime, **first_messagetime_result AS newest_time**
  FROM messages 
  ORDER by messagetime 
  DESC
"
);

感谢您的任何见解!

2 个答案:

答案 0 :(得分:3)

if ($result->num_rows > 0) {
    $row = mysqli_fetch_assoc($result)
    echo "<table id='myTbl' class='newest".$row['messagetime']."' border='1'>";
    echo "<thead><tr>";
    echo "<th>Content</th>"; //etc.
    echo "</tr></thead>";
    echo "<tbody>";
    do {
        // Fill the table here
    } while ($row = mysqli_fetch_assoc($result));
    echo "</tbody></table>";
}

答案 1 :(得分:0)

如果您愿意,可以在通过shile循环运行之前调用第一行或其他行。 while循环将从尚未调用的任何行开始。很容易忘记,while只存在循环遍历行直到完成。我们总是可以从查询中调用一行,但我们专门做了 more

您需要做的就是这个

$row = mysqli_fetch_assoc($result);

然后你可以做这样的事情来将消息时间存储在一个变量

$messagetime = $row;

然后你可以按照你喜欢的方式使用这个变量

在此实例之后,查询的第一行的id为1,运行以下内容时,它将以2开头。

while ($row = mysqli_fetch_assoc($result)) { ... }