简体   繁体   English

在SQL命令中计算百分比

[英]Calculating percentages in SQL command

I'm trying to refactor my code. 我正在尝试重构我的代码。 I was returning all rows, and filtering the result set with php, but this is quickly becoming a performance issue. 我返回了所有行,并使用php过滤了结果集,但这很快成为性能问题。

Current code: 当前代码:

$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;
                }
            }

Refactored SQL: 重构的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);

This returns ALL from products . 这将返回所有products I only want to return results that are >= 80. Where did I go wrong? 我只想返回> = 80的结果。我哪里出错了?

DB D B

| LowestNewPrice           | int(11)      | NO   |     | NULL                |       |
| LowestUsedPrice          | int(11)      | NO   |     | NULL                |       |
  1. You are missing brackets around LowestNewPrice - LowestUsedPrice 您在LowestNewPrice - LowestUsedPrice周围缺少括号
  2. As Luke mentioned, you may also be running into integer division. 正如卢克所说,您可能还会遇到整数除法。 Multiply with 100 before you divide. 除以之前,请乘以100。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM