2011-01-25 83 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, ',', ' ');