2011-11-11 11 views
0

私はこのような何かを行くと、クエリを実行する方法を把握しようとしている:3つのフィールドを返す2つのフィールドに関するMYSQLクエリの数学?

$query = "SELECT RegPrice, OnSalePrice 

Math.abs(Math.max(100 - (OnSalePrice)/(RegPrice) * 100)) AS DiscountIS 

FROM Products"; 

だから、RegPrice & OnSalePriceを取り、私に割引率を与えると一緒にDiscountISとしてそれを返します他の2つの値。

クエリTWO &戻る。

ありがとう!

答えて

1

あなたのクエリは、OnSalePriceの後にコンマがないことを除いて構文的に正しいです。Math.をabsまたはmaxの前に置かないでください。おそらくセミコロンで終了するべきですが、それは通常は重要ではありません。だから、正しいクエリは次のようになります。

$query = "SELECT RegPrice, OnSalePrice, ABS(MAX(100 - (OnSalePrice)/(RegPrice) * 100)) AS DiscountIS FROM Products;"; 

(私もABSとMAXを大文字にしましたが、それは単にスタイルの選択だSQLは、すべてのコマンドや関数の場合を無視します。)

しかし、問題がありますこの問合せでは、MAXは集計関数であるため、表全体の最大値が戻されます。そのため、MAXなどの集約関数を使用する場合、他の属性も選択できません。したがって、各商品にRegPrice、OnSalePrice、および割引を表示する場合は、これを行う正しい方法は単にMAXを省略することです。 Math.max関数は引数の最大値しか与えないので、これはあなたがしたいことだと思われますが、この場合は引数を1つしか与えていないので、わかりません)

$query = "SELECT RegPrice, OnSalePrice, ABS(100 - (OnSalePrice)/(RegPrice) * 100) AS DiscountIS FROM Products;"; 

実際に正規割引価格、販売価格、および割引のいずれか大きい値を知りたい場合は、SELECT内でSELECTを実行することによって処理する必要がある、やや複雑なクエリです。

$query = "SELECT RegPrice, OnSalePrice, ABS(100 - (OnSalePrice)/(RegPrice) * 100) AS DiscountIS FROM Products WHERE ABS(100-OnSalePrice/RegPrice*100)=(SELECT ABS(MAX(100-OnSalePrice/RegPrice*100)));"; 

ゼロ意志による除算、書かれたようOnSalePriceがRegPriceより大きい場合RegPriceがゼロの場合は、任意のバージョンでは、これはまだ値引きとして表示していることだろうということ、しかし、注意すべきです結果。

+0

申し訳ありません私はMATHの部分でJQueryを考えていました。私が望むのは、クエリを実行し、返されたデータとパーセンテージ値を持つデータベースからすべての値を取得することです。 – Monty

関連する問題