0

我需要从“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

4 回答 4

2

当然有更好的解决方案。我会说一个合适的。
你应该改变你的topicid领域,使它成为auto_increment-ed。

因此,在插入新主题时,只需分配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));
于 2012-12-15T14:05:35.907 回答
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;
?>
于 2012-12-15T13:53:36.370 回答
1

你为什么使用循环?

最大将只有 1 行。

尝试:

<?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;?>" />
于 2012-12-15T13:54:10.640 回答
0

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

<?php 
  $tquery = 'SELECT MAX(topicid) FROM post';
  $row = mysql_fetch_array(mysqli_query($connect,$tquery));
  $topid = $row[0];
?>
于 2012-12-15T14:00:06.460 回答