0

在庫テーブルからすべての製品を選択し、それらを他の 2 つのテーブル (テーブル l_products および a_products) と結合する選択クエリがあります。

SELECT 
i.*, 
b.title, 
ROUND((i.price/100*80) - l.price,2)      AS margin, 
l.price                                  AS l_price, 
a.price                                  AS a_price, 
ROUND((a.price/100*80) - l.price, 2)     AS l_margin 

FROM inventory i 
LEFT JOIN products    b ON i.id  = b.id 
LEFT JOIN a_products  a ON i.id  = a.id 
LEFT JOIN l_products  l ON i.id  = l.id 

WHERE 
a.condition LIKE IF(i.condition = 'New', 'New%', 'Used%') 
AND l.condition LIKE IF(i.condition = 'New', 'New%', 'Used%') 

この選択クエリは通常、次のようなテーブルを提供します...

id,        title, condition, margin, l_price, a_price ...
001-new    ...    new        10      20       10       
001-used   ...    used       10      25       20
002....

ここで、「新品」の製品よりも高価な (a_price が高い) すべての中古製品を無視するクエリの条件が必要です。上記の例のように、001-used は 001 よりも a_price が高いことがわかります。 -新着。

PHPを使用することに解決する必要なく、どうすればこれを達成できますか

4

1 に答える 1

0

FULL JOINこのクエリは、各 ID プレフィックスに対して一意に同じ値を持つ列にそれ自体を使用します。

SELECT001-new と 001-used、002-new と 002-used に対して同じ一意の値を生成する別のフィールドを呼び出しに追加することで、この効果を実現できます。

このような値の生成は、列から最初の 3 文字を抽出する独自の SQL ルーチンを定義することで実行できます。

于 2012-12-06T03:14:54.960 に答える