0
$dungeon = 0;
if($stmt->prepare("SELECT id,name FROM `dungeons` WHERE id > ?")) {
$stmt->bind_param('i',$dungeon);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id,$name);
$stmt2=$stmt;
while($stmt->fetch()) {
    echo "<th>".$name."</th>";
    $query = "SELECT COUNT(id),AVG(dungeon_percent),MAX(dungeon_percent) FROM `users` WHERE dungeon_current = ?"; $what=$id;
    $stmt2->prepare($query);
    $stmt2->bind_param('i',$what);
    $stmt2->execute();
    $stmt2->store_result();
    $stmt2->bind_result($howmany,$avg,$max);
    $stmt2->fetch(); 
    echo "<td align='center'>".$howmany."</td><td align='center'>".round($avg)."%</td><td align='center'>".$max."%</td></tr>";
    }
}

私が持っているものです。それでも、実際には4行あるのに1回だけループしますか? ありがとう。

4

1 に答える 1

1

次のような新しいステートメントを作成してみましたか:

 while($stmt->fetch()) {
      $query = "SELECT COUNT(id),AVG(dungeon_percent),MAX(dungeon_percent) 
                FROM `users`
                WHERE dungeon_current = ?"; 
      $what=$id;
      // prepare your new statement using the connection
      $stmt2 = $your_db->prepare($query);
      $stmt2->bind_param('i',$what);
      $stmt2->execute();
      $stmt2->store_result();
      $stmt2->bind_result($howmany,$avg,$max);
      $stmt2->fetch(); 
      echo "<td align='center'>".$howmany.
           "</td><td align='center'>".round($avg).
          "%</td><td align='center'>".$max."%</td></tr>";
  }

ループの外側で 2 番目のクエリを準備することをお勧めします。また、ループの外側で呼び出しbind_param()て、bind_result()それを複数回実行することもできます。

これは、同じことを達成するためのより効率的な方法です。

 $query = "SELECT COUNT(id), AVG(dungeon_percent), MAX(dungeon_percent) 
           FROM `users`
           WHERE dungeon_current = ?"; 

 $stmt2 = $your_db->prepare($query);
 $stmt2->bind_param('i', $id);
 $stmt2->bind_result($howmany, $avg, $max);

 while($stmt->fetch()) {
      $stmt2->execute();
      $stmt2->store_result();
      $stmt2->fetch(); 
      echo "<td align='center'>".$howmany.
           "</td><td align='center'>".round($avg).
          "%</td><td align='center'>".$max."%</td></tr>";
  }    
于 2012-04-23T05:55:48.730 に答える