从列中获取最高数字

时间:2012-12-15 13:51:53

标签: php mysqli

我需要从“topicid”列获得最高数字,下面的代码片段似乎工作正常但是想知道是否有更好的解决方案,可能没有while循环?

<?php
   $tquery = "SELECT MAX(topicid) FROM post";
   $tresult = mysqli_query($connect,$tquery);

   while($row = mysqli_fetch_array($tresult)){

   $topidcount = $row['MAX(topicid)'] +1;

?>
   <input type="hidden" name="topicid" value="<?php echo $topidcount;?>" />
   <?php
   }
   ?>

4 个答案:

答案 0 :(得分:2)

当然有一种更好的解决方案。我会说一个合适的人 您应该更改topicid字段,并将其auto_increment - 编辑。

因此,在插入新主题时,只需为其分配NULL,即可自动分配下一个免费号码。
使用当前设置,您将面临竞争条件和不一致的数据。因此,您不应手动分配新号码。

对于“无循环”解决方案,智能开发人员随时准备开发一种工具来缓解频繁的任务 像这样的自定义函数非常方便:

function sqlOne($sql) {
    global $connect;
    $res = mysqli_query($connect,$sql) or trigger_error(mysqli_error($connect)."[$sql]");
    $row = mysqli_fetch_row($res); 
    return $row[0];
}

它可以存储在某个地方,然后在一行中获得所需的数据

$title = sqlOne("SELECT title FROM post WHERE topicid=".intval($topicid));

答案 1 :(得分:1)

如果您知道只返回了一行,请取出while循环:

<?php
   $tquery = "SELECT MAX(`topicid`) FROM `post`;";
   $tresult = mysqli_query($connect, $tquery);

   // get the query result without the while loop
   $row = mysqli_fetch_array($tresult);

   $topidcount = $row['MAX(topicid)'] +1;
?>

答案 2 :(得分:1)

你为什么使用循环?

Max只有一行。

尝试:

<?php
   $tquery = "SELECT MAX(topicid) as max FROM post";
   $tresult = mysqli_query($connect,$tquery);
   $row = mysqli_fetch_array($tresult));
   $topidcount = $row['max'] +1;
?>
   <input type="hidden" name="topicid" value="<?php echo $topidcount;?>" />

答案 3 :(得分:0)

您也不需要使用列名。结果只有一行而且只有一列,所以只需抓住单个元素:

<?php 
  $tquery = 'SELECT MAX(topicid) FROM post';
  $row = mysql_fetch_array(mysqli_query($connect,$tquery));
  $topid = $row[0];
?>