複雑な検索シナリオ用の SQL ステートメントを作成しようとしていますが、皆さんの助けが必要です。シナリオは次のとおりです。
私は、マーチャントがそれにサインアップし、各製品に提供する最高の価値 (最大の金額) を提供し、ユーザーが自分の場所を提供し、各製品の量/キロ数を提供できるサービスを提供しようとしています。彼らは自分の値を入力フォームに入力してから、SQLにすべての商人をTOTALで提供する金額とともにリストし、最も多いものが上から始まるようにします。
Merchants テーブルと MerchantProducts テーブルと Locations テーブルを含むデータベースがあります。各加盟店には 20 個の商品があり、これらの商品はすべての加盟店で同じです。
Merchant Table I have:
UserID (which is merchant's unique id)
MerchantName
MerchantTelNo
MerchantIsActive
MerchantProducts Table I have:
MerchantProductID
UserID
MerchantProductName
MerchantProductValue
MerchantProductLastUpdated
私がやろうとしていることは次のとおりです。
1- ユーザーが持っている製品の量を入力できる製品フォームがあります。製品のリストには、製品の名前(ラベル)とそれらが持っている量(テキストボックス)のみが含まれています。製品の量は、製品の値で乗算されます。
2- ユーザーは自分の場所を入力します。
3- SQL フィルは近くの商人を見つけ、最も多い金額が一番上に、最も少ない金額がその下にリストされる場所をリストします。
これまでのところ、ユーザーが 1 つの製品のみを選択して場所を入力すると、最も多くの金額が提供された 1 つのマーチャントの返品を受け取ることができました。次の SQL ストアド プロシージャでこれを実現しました。
ALTER PROCEDURE [dbo].[GetNearbyLocations2]
@ChosenProduct VARCHAR(100),
@CenterLatitude FLOAT,
@CenterLongitude FLOAT,
@SearchDistance FLOAT,
@EarthRadius FLOAT AS DECLARE @CntXAxis FLOAT DECLARE @CntYAxis FLOAT DECLARE @CntZAxis FLOAT
SET @CntXAxis = COS(RADIANS(@CenterLatitude)) * COS(RADIANS(@CenterLongitude))
SET @CntYAxis = COS(RADIANS(@CenterLatitude)) * SIN(RADIANS(@CenterLongitude))
SET @CntZAxis = SIN(RADIANS(@CenterLatitude))
SELECT TOP 100 *,
ProxDistance = @EarthRadius * ACOS( dbo.XAxis(latitude, longitude)*@CntXAxis + dbo.YAxis(latitude, longitude)*@CntYAxis + dbo.ZAxis(latitude)*@CntZAxis)
FROM MerchantProducts AS M INNER JOIN Locations AS L ON M.UserID = L.UserID INNER JOIN (SELECT MAX(M.MerchantProductValue) AS MerchantProductValue FROM Locations AS L LEFT OUTER JOIN MerchantProducts AS M On L.UserID = M.UserID
WHERE (M.MerchantProductName = @ChosenProduct AND @EarthRadius * ACOS( dbo.XAxis(latitude, longitude)*@CntXAxis + dbo.YAxis(latitude, longitude)*@CntYAxis + dbo.ZAxis(latitude)*@CntZAxis) <= @SearchDistance))
AS MX ON M.MerchantProductValue = MX.MerchantProductValue
AND M.MerchantProductName = @ChosenProduct
AND latitude IS NOT NULL ORDER BY ProxDistance ASC
いいえを達成するためにストアドプロシージャを作成しようとしています。1,2 & 3. 基本的に、ユーザーが各製品について何kgの製品を持っているかを入力してから、SQLで各マーチャントを調べて、どのマーチャントがすべての合計金額が最も多いかを調べます。ユーザーがリストに値を入力した製品。
事前に感謝します。私の質問がうまくいくことを願っています。