2011-07-27 81 views
1

該代碼片段旨在返回此表中每個回合的最小和最大ID 我只是想知道是否有一個不太笨拙的方式來做到這一點。PHP mysqli是最簡單的方法嗎?

$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 ...

改爲,

$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]; 
     } 
    } 
+0

最糟糕的做法,我想我不需要array_values打電話,因爲我通過一個foreach做... – Jamie

+0

這是薩吉和馬克之間的折騰。感謝你們倆。 – Jamie

回答

2

如何在一個查詢中這樣做:

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

它會更有效地運行單個查詢並使用WHERE round IN (....)子句:

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

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

作爲一般規則,執行返回「大」行數的單個查詢將比執行一次只返回幾行或一行的一系列較小/單個查詢更有效。你只掃描索引一次,你只需要檢索一次數據。使用的foreach查詢

1

使用group by

是我見過

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

我有一個foreach愛孩子的時刻,我相信你一直在那裏。 :P – Jamie