PHP mysqli is this the easiest way?
The code snippet is meant to return the minimum and maximum id from each round in this table
$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...
Changed to,
$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];
}
}
How about doing this in a single query:
SELECT MIN(id), MAX(id) FROM $tablename GROUP BY round
It'd be more efficient to run a single query and use a WHERE round IN (....)
clause:
$round_clause = implode(',', $rounds);
$query = "SELECT round, MIN(id), MAX(id) FROM $tablename WHERE round IN ($round_clause) GROUP BY round";
As a general rule, doing a single query that returns a "large" number of rows is going to be more efficient than doing a series of smaller/single queries that only return few or one rows at a time. You only scan the indexes once, you only have to retrieve the data once.
use group by
using query in foreach is the worst practice I ever seen
SELECT Min(id), Max(id) FROM $tablename GROUP BY round
精彩评论