目標
製品がオファーであり、最低価格の場合は、特定の列を返します。
問題
製品価格比較のアプリケーションを作成しています。特定の製品の製品リストと最低価格を既に取得しています。しかし、ある日のうちにその商品をオファーに設定し、他のすべての商品の中で最低価格にすることができます。その場合、フラグなどを使用して、そのような情報をユーザーに識別させる必要があります。
クエリ自体を使用してこの動作を行うことを考えていますが、わかりません。製品が販売されていない場合、C# でこれをどのように処理するかがわからないため、この慣行が一貫していないように見えることがあります。コラムお待ちしておりproductState
ます。提案が必要です (もちろん、構文もわかりません)。
詳細
C#.NET + MVC 4 + MySQL + Entity Framework 5 + ストアド プロシージャ + Razor エンジンを使用しています。
次のフラグメントは、比較対象の製品リストの最低価格を返します。
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then
marketProducts.ProductOriginalPrice
Else
Least(
marketProducts.ProductPromotionalPrice,
marketProducts.ProductOriginalPrice
)End) As minProductPrice,
しかし、私はこのようなことをしたいです (もちろん、構文は間違っていますが、説明するために「機能します」):
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then
marketProducts.ProductOriginalPrice
Else
marketProducts.ProductState = 1 As productState, /*
This is a normal
column.
1 means that
the product is on
offer.
*/
Least(
marketProducts.ProductPromotionalPrice,
marketProducts.ProductOriginalPrice
)End) As minProductPrice,
完全なクエリ:
CREATE DEFINER=`root`@`localhost` PROCEDURE `getProductsList`(IN `categoryId` INT, IN `productState` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
Select product.Id As productId,
product.Name As productName,
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then marketProducts.ProductOriginalPrice Else
Least(marketProducts.ProductPromotionalPrice, marketProducts.ProductOriginalPrice)
End) As minProductPrice,
measure.Name As measureName,
measure.Abbreviation As measureAbbreviation,
productsImages.ProductImageThumbnail As thumbnailUrl,
product.InMarketsQuantity as numberOfMarketsThatHaveThisProduct
From bm_market_products as marketProducts
Join bm_products As product On marketProducts.ProductId = product.Id
Join bm_categories As category On product.CategoryId = category.Id
Join bm_measures As measure On product.MeasureId = measure.Id
Join bm_products_images As productsImages On product.Id = productsImages.ProductId
WHERE (productState Is Null Or marketProducts.ProductState = productState)
And (categoryId Is Null Or category.Id = categoryId)
Group By marketProducts.ProductId;
END
この手順により、次の結果が返されます。
何か案は?