3

我知道标题有点复杂,但我想说的是:

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

该表包含广告名称、目标受众、坐标、流行度和展示激励。假设我只想显示与当前用户登录的目标受众相同的广告。我还想只显示那些人气至少为 5 且与会员的距离 < 80 英里的事件。与会员的距离越短越好,人气越高也越好。我知道我可以通过 Descending Popularity 和 Ascending Distance 对查询结果进行排序。

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

我认为很酷的是使用归一化加权乘数来对查询结果进行排序,从而得出一个综合分数。比如说,我希望“人气”的权重因子为 0.7,而“距离”的权重因子为 0.3。现在,查询的结果将按最大的综合得分 Desc 排序。我已经知道,要让它适用于距离,我必须将最低距离除以查询结果中的所有距离值,这样实际最低距离的得分为 1。这将是最高得分这部分算法。然后,当然,该 1 和所有其他距离值将乘以 0.3 以使加权乘数生效。反之亦然

我知道这听起来很复杂,但它必须以某种方式成为可能。我之前用求解器在 Excel 电子表格中完成了它,但现在我必须将它翻译成 SQL。非常感谢任何和所有反馈。

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

4

2 回答 2

2

因此,如果您的评分介于 [0 - 5] 和距离之间,

所以你会按这个排序吗?((人气*0.7)*((距离MAX-距离)*0.3))

甚至可能将这些权重设置为服务器变量,这只是一个建议(在我的 excel 文档中制定,呵呵)

select field1, field2, field3
from stuff
order by ((popularity*0.7)*((distanceMAX-distance)*0.3)) desc
于 2013-03-14T08:51:10.660 回答
1

你可以试试这样的

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

未经测试,但也许它可以帮助您进行更多实验?

于 2013-03-14T08:49:38.197 回答