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

確かに、より良い解決策があります。私が言う適切なもの。フィールド
を変更して、 -ed にする必要があります。topicidauto_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];
}

どこかに保存して、必要なデータを1行で取得できます

$title = sqlOne("SELECT title FROM post WHERE topicid=".intval($topicid));
于 2012-12-15T14:05:35.907 に答える
1

while返される行が1つしかないことがわかったら、ループを削除します。

<?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

また、列名を使用する必要はありません。結果には 1 つの行と 1 つの列しかないため、1 つの要素を取得するだけです。

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