2011-01-25 75 views
0

有沒有更快的方法來做到這一點?更快的mysql查詢

$data1 = mysql_query(
"SELECT * FROM table1 WHERE id='$id' AND type='$type'" 
) or die(mysql_error()); 

$num_results = mysql_num_rows($data1); 
$data2 = mysql_query(
"SELECT sum(type) as total_type FROM table1 WHERE id='$id' AND type='$type'" 
) or die(mysql_error()); 

while($info = mysql_fetch_array($data2)){ 
    $count = $info['total_type']; 
} 
$total = number_format(($count/$num_results), 2, ',', ' '); 
echo $total; 

乾杯!

回答

0
SELECT COUNT(*) AS num_results, SUM(type) AS total_type FROM table1 
    WHERE id = $id and type = $type 

這個單個查詢將產生一個包含您想要的兩個值的單行結果集。

請注意,您應該使用參數化查詢而不是直接變量替換來避免SQL注入攻擊。另外,我猜SUM(類型)不是你真正想要做的,因爲你可以將它計算爲(num_results * $ type)而不需要第二個查詢。

1

看你的問題,我認爲你在尋找這樣的事情:

SELECT SUM(type)/COUNT(*) FROM table1 WHERE ... 
0

一般:SELECT *可以「縮短」到例如SELECT COUNT(*),如果你關心的是匹配行的數量。

+0

`COUNT(*)`是稍微好一點(因爲它不依賴於現場數據,因爲它是'COUNT(ID)`) – zerkms 2011-01-25 01:37:42

+0

無加入兩個查詢的方法呢? – Alfie 2011-01-25 01:38:00

0
$data1 = mysql_query("SELECT sum(type) as total_type,count(*) as num_rows FROM table1 WHERE id='$id' AND type='$type'" 
) or die(mysql_error()); 
$info = mysql_fetch_array($data1); 
$count = $info['total_type']; 
$num_results = $info['num_rows']; 
$total = ($count/$num_results); 
echo $total; 
0

一號線:

echo number_format(mysql_result(mysql_query("SELECT SUM(type)/COUNT(*) FROM table1 WHRE id = $id AND type = '$type'"), 0), 2, ',', ' ');