-1

わかりました - これはばかげた質問かもしれませんが、私の完璧への欲求が私を刺激しています。

データベース テーブルから行をフェッチする mysql クエリがあり、収集するすべての列に対して何らかの形または形式の値が必要です。次のサンプル コードを見てください (代わりに配列を使用して出力を収集できます。基本的な質問は同じはずです)。

$query="SELECT A,B,C,D FROM table1 WHERE 'X'='Y'";
$result=mysql_query($query,$resource);
while($row=mysql_fetch_assoc($result)){
   $var1=$row['A'];   $var2=$row['B'];

   echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}

私の質問は次のとおりです。

この場合、$row['A'] と $row['B'] はすべての行で同じ値であるため、1 回だけ必要ですが、1 回だけ必要です。他の値は行ごとに異なり、例のように必要です。

ループ全体で変数を継続的に設定することに問題はありますか? それとも使ったほうがいいのif(!issetでしょうか…?またはこれを行う他の方法はありますか?それとも、パフォーマンスへの影響が非常に小さいため、この質問は無関係ですか?

ありがとう

4

4 に答える 4

1
  1. このシナリオでのパフォーマンスへの影響は無関係です。実際、if(isset..)ガードに少し時間がかかるかどうかを推測します-この質問が重要になる唯一のシナリオは、(より大きな)オブジェクトまたは配列を割り当てて$var1、どういうわけかphpに参照ではなくコピーを強制する

  2. 審美的な理由で気になる場合 (私は関連できます ;))、do - while ループを使用できます。

    //assuming you always get at least one result
    $result=mysql_query($query,$resource);
    $row=mysql_fetch_assoc($result);
    $var1=$row['A'];   $var2=$row['B'];
    
    do {
      // the loop stuff - stringify or echo the list
    } while ($row=mysql_fetch_assoc($result)) ;
    
于 2012-09-21T16:52:14.503 に答える
1

あなたはdo-while式でそれを行うことができます

$query="SELECT A,B,C,D FROM table1 WHERE 'X'='Y'";
$result=mysql_query($query,$resource);
if($row=mysql_fetch_assoc($result)) {
    $var1=$row['A'];   $var2=$row['B'];
    do {
        echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
    } while($row=mysql_fetch_assoc($result));
}
于 2012-09-21T16:54:11.173 に答える
1

本当に気にしないでください。何百万ものレコードをループしていない限り。

さらに速度が必要な場合は、while ループでエコーしないでください。

 $result=mysql_query($query,$resource);
    $string ='';
if ($result) {
$row=mysql_fetch_assoc($result);
$string .= '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
$var1=$row['A'];
$var2=$row['B'];

    while($row=mysql_fetch_assoc($result)){

    $var1=$row['A']; $var2=$row['B'];
    $string .= '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
    }
   }
    echo $string;

あと2つ。mysql_* を使用しないでください: この拡張機能の使用はお勧めしません!

そして(他の誰かが言ったと思ったように)a/bが常に同じなら、データベース構造を再考する必要があります.

編集:あなたの質問に本当の答えを与えるために:私は小さなテストをしました。各ループ (1,000 回) での値の設定には 0.00027 秒かかります。値がすでに設定されているかどうかをループ内で確認するには、0.00030 秒かかります。そのため、毎回設定するだけで、確認するよりもさらに高速になります。

于 2012-09-21T16:34:38.703 に答える
1

ループの外側で変数を設定しないのはなぜですか。

$result=mysql_query($query,$resource);
$result_new = mysql_fetch_assoc($result);
$var1 = $result_new['A']; //considering $result_new['A'] always exists 
$var2=$result_new['B']; //considering $result_new['B'] always exists
while($row=$result_new){ 
echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}
于 2012-09-21T16:26:41.560 に答える