PHP / SQL查找查找最后的结果

时间:2013-11-22 15:09:41

标签: php mysql sql

我在PHP中运行while循环,从mysql数据库中选择数据。我怎样才能知道最后的记录是什么,

例如:

$sql="SELECT * from table1 ";
$rs=mysql_query($sql,$conn);
while($result=mysql_fetch_array($rs))
{
echo $result["col1"].' - '.$result["col2"].'<br>';
}

然后当它到达最后一条记录时我想显示它:

echo 'Last Record: '.$result["col1"].' - '.$result["col2"].'<br>';

5 个答案:

答案 0 :(得分:2)

您基本上需要记录您拥有的行数,然后设置计数器。您可以使用mysql_num_rows()执行此操作:

$sql="SELECT * from table1";
$rs = mysql_query($sql,$conn);
$numRows = mysql_num_rows($rs);

$i = 1;
while($result=mysql_fetch_array($rs))
{
    echo ($i == $numRows) ? 'Last Record: '.$result["col1"].' - '.$result["col2"].'<br />' : $result["col1"].' - '.$result["col2"].'<br />';
    $i++;
}

您应该注意,mysql_*()系列函数现已弃用。为了安全和长寿,您确实应该使用MySQLiPDO

答案 1 :(得分:1)

获取返回的行总数,并检查循环迭代使用标志变量并检查循环if flag == total rows

$t=mysql_num_row($rs);
$i=0;
while($result=mysql_fetch_array($rs))
{
$i++;

if($t == $i){
echo "Last Record ";
}
echo $result["col1"].' - '.$result["col2"].'<br>';
}

mysql_num_rows

答案 2 :(得分:0)

您可以简单地使用sql查询本身来获取最后一个值,基于您想要的任何顺序(或者只使用DESC来获得自然顺序的底部):

SELECT * FROM table1
ORDER BY your_column DESC
LIMIT 1;

编辑:由于您要查找最后一行,可以查看mysql_num_rows

$numrows = mysql_num_rows($rs);
$i = 1;
// in while loop...
    if ($i === $numrows) {
        // print last result
    } else {
        // print normal result
    }
    $i++;
// end while loop

基本上,您需要一个计数器用于您所在的记录,然后在行数与您所在的行号(例如最后一行)相同时写入

答案 3 :(得分:0)

$sql="SELECT * from table1 ";
$rs=mysql_query($sql,$conn);
$num_rows  =  mysql_num_rows ($rs);

for ($i=0; $i < $num_rows; $i++) { 
    $result=mysql_fetch_array($rs);
    if ($i == ($num_rows - 1)) {
        echo 'Last Record: '.$result["col1"].' - '.$result["col2"].'<br>';
    } else {
        echo $result["col1"].' - '.$result["col2"].'<br>';
    }
}

答案 4 :(得分:0)

通过“艰难的方式”来实现这个例程:

while ($next_row = fetch_row(...)) {
  if ($prev_row) { do_output($prev_row); }
  $prev_row = $next_row;
}
if ($prev_row) { do_output($prev_row, FLAG_IS_LAST_ROW); }

为什么呢?未来的维护可能会使mysql_num_rows()不可靠,或者是因为结果集太大,或者因为您想要与各种SQL后端进行交互。

默认情况下,MySQL客户端库将整个结果集拉入内存 - 这就是它如何知道SELECT的行数而不必计数提取。对于小型结果集,此行为非常方便,但对于大型结果集却是毁灭性的。这是用户可配置的。 (这些选项通常被命名为“store_result v.use_result”或“buffered v.unbuffered。”)

此外,大多数RDBMS接口不会提前知道结果集的大小。如果您希望某天以可重复使用的方式与这些接口进行交互,则需要更改方法。