【发布时间】:2012-04-23 14:43:52
【问题描述】:
我正在尝试为复杂的搜索场景构建 SQL 语句,我需要你们的帮助。场景是:
我正在尝试提供一项服务,商家将注册它并提供他们将为每种产品提供的最佳价值(最多的钱),然后用户可以提供他们的位置并提供多少/多少公斤他们拥有的每种产品并将它们的值输入到输入表单中,然后我希望我的 SQL 列出所有商家以及他们将提供的总金额,其中大部分将从顶部开始。
我有一个包含 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 填充找到附近的商户,并将它们列出在顶部和底部列出的最多的位置。
到目前为止,我已经完成了用户只选择一种产品并输入他们的位置的情况,我将获得一个提供最多金额的商家的回报。我已经通过以下 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. 基本上我希望用户输入他们对每种产品有多少公斤的产品,然后我希望 sql 遍历每个商家并找出哪个商家将为所有人提供最多的总金额用户在列表中输入值的那些产品。
提前致谢,希望我的问题能通过。
【问题讨论】:
-
对不起,我正在尝试创建一个存储过程来完成否。 1,2 & 3. 基本上我希望用户输入他们对每种产品有多少公斤的产品,然后我希望 sql 遍历每个商家并找出哪个商家会在列表中给出最多的钱。
-
感谢您告诉我们您要做什么,但您需要提出一个具体问题。本网站不适合自愿为您工作的人。你写的是一个规范,而不是一个问题。
-
感谢您的回复 JohnFx,是的,我明白了,我真的不希望有人为我做我的工作,我只需要正确方向的帮助,或者如果教程有类似问题,那么我很高兴从那里拿走它。我对sql不太熟悉,任何建议都会很棒。谢谢
标签: sql database sql-server-2008