我需要从“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
}
?>
答案 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];
?>