MySQL ORDER BY CASE / IF相关问题

时间:2012-12-25 01:30:40

标签: mysql sql-order-by relevance

我从未使用ORDER BY CASE或ORDER BY IF(),我在互联网上找到的几个例子比帮助我完成以下任务更令人困惑:

我有会员名单,我想"奖励"通过在此成员列表中对用户进行更高的排序(到顶部)来略微改变用户的活动。

在我的例子中,我有一个名为&#34的MySQL表;用户"有3列:

  user_percentage     |     user_photo     |     user_lastlogin
    ----------------------------------------------------------
        12                      1                  1356389646
        42                      1                  1456549641
        37                      0                  1776389443
        84                      1                  1356535535
        56                      0                  1868689646
        66                      0                  1811189622
        71                      1                  1656779645
  • " USER_PERCENTAGE"保存所有填写的配置文件的值(0 - 100) 每个用户的字段。
  • " user_photo"保持值(0 =假,1 = 如果用户上传了个人资料照片,则为true)。
  • " user_lastlogin拥有 他们上次访问的价值(时间戳)。

这有点难以解释,但要简单地说出我想要的东西:

  • 具有较高user_percentage值的用户应该位于成员列表的顶部,但如果他没有user_photo,那么他应该向下移动"在成员列表中,如果他有一个旧的user_lastlogin时间戳,则会在成员订单中将其列入更多内容。

  • 我试图阻止的是用户已注册,填写所有个人资料字段(然后user_percentage值将= 100)并上传照片(然后user_photo将= 1)但是,由于很长一段时间没有登录(所以他有一个非常旧的user_lastlogin =时间戳),然后我希望这个用户按成员列表顺序向下移动。

我的问题是:这是否可以使用1个MySQL ORDER BY语句?

让我们说user_photo只有30%的重要性,而user_lastlogin的重要性更高,而user_percentage也更高一点。

有什么想法吗?

祝你好运!

1 个答案:

答案 0 :(得分:0)

为了开始编写SQL,您需要弄清楚每个参数的价值。

您应该生成一个示例列表,然后将其转换为简单的计算,如:

(photo*timesincelogin*20)+(percentage)

或基于CASE的陈述,每个都有一个计算 - 即:

所有拥有照片的人然后所有人都没有,time*percentage

手动波浪'向下移动'对于使用SQL命令的答案来说还不够具体。