2013-03-14 112 views
2

我知道标题有点复杂,但我得到的是这样的:使用权重因子进行多列排序查询结果

我有一个不同的广告横幅表存储,将显示在网页上。我试图想出一种方法来以最好的方式对这些广告进行排序,以满足网站用户的需求。所以,我想到的一个例子是:

该表具有广告名称,目标受众,坐标,人气和激励显示。假设我只想显示与当前登录用户所属的目标受众相同的广告。我也只想显示至少有5人气和距离会员< 80英里的事件。与会员较低的距离是好的,并且具有较高的人气也很好。我知道我可以按降序人气和升序距离对查询结果进行排序。

但是,这不会是我想要做的。如果按照刚刚描述的方式进行操作,我认为我可能会遇到距离用户6英里的结果,但受欢迎程度仅为5的问题。我不希望此结果成为第一个排序的查询结果出现。

我认为很酷的方法是使用归一化加权乘数来对问题结果进行排序。比方说,我希望人气获得0.7的权重因子,距离的权重因子为0.3。现在,查询的结果将按最大综合评分Desc排序。我已经知道,为了适应距离,我必须将查询结果中的所有距离值除以最小距离,以便实际最低距离得分为1.这将是这部分算法。那么,当然,1和所有其他距离值将乘以0.3以使加权乘数生效。反之亦然人气

我知道这听起来很复杂,但它必须以某种方式。我之前在解决方案中使用过Excel电子表格,但现在我必须将其转换为SQL。任何和所有的反馈是非常感谢。

我期望的问题是从广告表中获取坐标,并将其与登录到我的网页上的用户的当前位置进行比较。这必须在显示查询结果之前完成,因为查询不是询问坐标,而是询问与用户的距离。现在,我想到了它。这部分不应太难编码。也许我只是需要语法帮助。

+0

你是如何得到用户的距离?它是储值吗? – 2013-03-14 08:33:05

+0

@ sas1ni69不,我查看广告描述的坐标,然后查看用户当前位置的坐标。那么它只是简单的距离公式。 – Connor 2013-03-14 08:40:08

回答

1

你可以尝试这样的事情

SELECT ad.*, ((ad.popularity * 0.7) + (ad.distance * 0.3)) AS relevance 
FROM ad 
WHERE popularity >= 5 
ORDER BY relevance, popularity DESC 

未经测试,但也许它可以帮助你尝试多一点?

2

所以,如果你得到了[0 - 5]之间的评价 和距离,

,所以你会被这个排序? ((普及* 0.7)*((distanceMAX距离)* 0.3))

甚至设置这些权重的服务器变量,这仅仅是一个建议

select field1, field2, field3 
from stuff 
order by ((popularity*0.7)*((distanceMAX-distance)*0.3)) desc 
(在我的Excel文件嘿嘿制定)
+0

那么简单,我甚至没有这样想过。在乘以加权因子之前,我必须将流行度和距离标准化,但这肯定有潜力,甚至可能是一个合适的答案。此外,这两个不会相乘,但会被添加到给出的最高分数为1.我会让话题逗留一天,看看是否有人可以更详细地回答这个问题,然后再将问题标记为已回答。非常感谢@无芯片 – Connor 2013-03-14 08:58:00

+0

没问题,乐意帮忙,(我得到的结果值高于1,但这仅仅用于排序时无关紧要) – bonitzenator 2013-03-14 12:25:59

相关问题