我从来没有使用过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 = false)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的重要性也更高。
任何想法?
致以最亲切的问候!
为了开始编写SQL,您需要明确每个参数的价值。
您应该生成一个示例列表,然后将其转换为一个简单的计算,如:
(photo*timesincelogin*20)+(percentage)
或基于CASE的语句,每个语句都有一个计算-即:
所有有照片的人然后所有没有照片的人,按time*percentage
分类。
手摇式的"向下移动一点"对于SQL命令的答案来说不够具体。