【问题标题】:Ranking search results排名搜索结果
【发布时间】:2014-05-02 16:41:33
【问题描述】:

我有一个带搜索功能的辅导网站。我希望导师根据几个加权标准出现在列表中,包括他们是否是订阅持有者、他们是否提交了个人资料照片、他们是否包含了很多关于自己的信息等等......

基本上,我有很多标准来衡量他们的排名。

我没有编写包含多个 ORDER BY 的复杂 SQL 查询(如果这甚至可能的话),而是考虑创建一个表(可能是一个临时表),它根据几个标准分配数值以得出最终结果搜索排名。

我不完全确定如何去做,或者这是否是一个好主意,所以我想知道社区对 a) 这种方法的看法,以及 b) 在 SQL 中实现它的可能方法.

【问题讨论】:

    标签: mysql sql search


    【解决方案1】:

    我会在现有表之一中添加一个字段,该字段或多或少是其“权重”的表示,用于排序目的。然后,我将使用经常运行的数据库过程填充此列(您可以创建一个仅在已更新的记录上运行的队列,或者如果需要,只在所有记录上运行它)。这样一来,我就可以将数据拉回并按一列而不是多列排序。

    另外,您可以使用视图。这实际上取决于您是希望在每次提取数据时由过程还是由数据库来完成数字运算(为了搜索功能和速度,我建议使用数据库过程)。

    【讨论】:

    • 嗯,所以这个“过程”是一种我直接写入 MySQL 的存储过程(不是我网站的后端语言 (PHP)?)。抱歉,我知道这些东西存在,但以前没有写过。
    • 对,它是一个存储过程,设置了调度程序作业。所以数据库每隔一段时间就会运行一次。它使用数据库的资源,与插入/查询异步运行,因此对用户的影响很小(除非它消耗了太多的数据库资源以至于它以这种方式减慢它的速度,这仍然比每次都做更有效查询)
    • 对我应该在存储过程中使用哪种循环来遍历每个用户有什么建议吗?我读过“光标”是只读的,所以我不能用它来更新表格。
    • 在线查找示例,您使用游标获取要更新的值,然后在更新语句中使用这些值。 stackoverflow.com/questions/12849883/…
    • 用游标循环修复它——一定误解了“只读”的意思。能够将 UPDATE 查询放入循环中没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多