2011-07-27 9 views
1

コードスニペットは、このテーブルの各ラウンドの最小IDと最大IDを返すようになっていますこれを実行する方法がそれほど簡単ではないかと思います。PHP mysqliはこれが一番簡単な方法ですか?

SELECT MIN(id), MAX(id) FROM $tablename GROUP BY round 
+0

を見た最悪の習慣です... – Jamie

+0

それはサギとマークの間のトスをしていた。お二人のおかげです。 – Jamie

答えて

2

に変更

$query = "SELECT round FROM $tablename"; 
$rounds = Array(); 
if ($result = $Login->mysqli->query($query)) { 
    while ($row = $result->fetch_array(MYSQL_ASSOC)) { 
     $rounds[] = $row['round']; 
    } 
} 
$rounds = array_unique($rounds); 
$rounds = array_values($rounds); 
$roundBound = Array(); 
foreach ($rounds as $roundNum) { 
    $query = "SELECT MIN(id), MAX(id) FROM $tablename WHERE round = $roundNum;"; 
    $result = $Login->mysqli->query($query); 
    $row = $result->fetch_row(); 
    $roundBound[] = $row[0]; 
    $roundBound[] = $row[1]; 
} 

hurr ...

単一のクエリを使用し、WHERE round IN (....)句を使用します。

$round_clause = implode(',', $rounds); 

$query = "SELECT round, MIN(id), MAX(id) FROM $tablename WHERE round IN ($round_clause) GROUP BY round"; 

一般に、「大」行数を返す単一のクエリを実行すると、一度に数行または1行しか返さない一連の小さな/単一クエリを実行するよりも効率的になります。インデックスを一度スキャンするだけで、データを一度取得するだけで済みます。

2

それを実行するために、より効率的になるだろう:単一のクエリでは、このことについてどのように

$query = "SELECT MIN(id), MAX(id) FROM $tablename GROUP BY round"; 
    if($result = $Login->mysqli->query($query)) { 
     while ($row = $result->fetch_row()) { 
      $roundBound[] = $row[0]; 
      $roundBound[] = $row[1]; 
     } 
    } 
1

foreachの中にクエリを使用して、使用group by

は私が今まで私は私がしますforeachを通してそれをやっているようarray_valuesを呼び出す必要はありませんと仮定し

SELECT Min(id), Max(id) FROM $tablename GROUP BY round 
+0

私はforeach愛の子供の瞬間を持っていた、私はあなたがそこにいたと確信しています。 :P – Jamie

関連する問題