0
我试图重构我的代码。我返回所有行,并用php过滤结果集,但这很快就会成为性能问题。在SQL命令中计算百分比
当前代码:
$percentOff = 80;
$stmt = $this->dbh->prepare("SELECT * FROM products WHERE Available=1 AND Merchant='Amazon'"); //Selects all from DB. VERY slow
$finalResults = array();
//Limit the results returned
foreach($rows as $row){
$totalSavings = ($row["LowestNewPrice"] - $row["LowestUsedPrice"])/$row["LowestNewPrice"] * 100;
if($totalSavings >= $percentOff){
$finalResults[] = $row;
}
}
重构的SQL:
$stmt = $this->dbh->prepare("SELECT * FROM products WHERE Available=1 AND Merchant='Amazon' AND (LowestNewPrice - LowestUsedPrice/LowestNewPrice * 100) >= ?");
$stmt->bindValue(1, $percentOff, PDO::PARAM_STR);
这将返回所有的products
。我只想返回> = 80的结果。我哪里错了?
各地LowestNewPrice - LowestUsedPrice
| LowestNewPrice | int(11) | NO | | NULL | |
| LowestUsedPrice | int(11) | NO | | NULL | |
根据规模,可能值得在列中缓存“(LowestNewPrice - LowestUsedPrice/LowestNewPrice * 100)'。作为一个快速猜测,这可能是'LowestUsedPrice/LowestNewPrice'的整数除法的结果。这取决于你的表格模式。 –
缓存是在计划中,但我需要首先得到这个简单的修复。我对MySQL不太熟悉,整数除法如何影响声明? PHP正在处理它,这只是缓慢的 –
Interger划分舍入到最接近的整数。所以例如(48/50)* 100 = 0 * 100 = 0评估为48/50 * 100,而100 * 48/50评估为(100 * 48)/ 50 = 4800/50 = 96。 –