1

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

我有一个成员列表,我想通过在此成员列表中将用户排序更高(到顶部)来“奖励”用户的活动。

在我的示例中,我有一个名为“users”的 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 = false,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 的重要性也更高一些。

有任何想法吗?

此致!

4

1 回答 1

0

为了开始编写 SQL,您需要明确每个参数的价值。

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

(photo*timesincelogin*20)+(percentage)

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

所有有照片的人,然后是所有没有照片的人,按time*percentage.

手动“向下移动一点”对于 SQL 命令的答案来说不够具体。

于 2012-12-25T01:58:58.790 回答