我试图在分组优先级的基础上用php对mysql数据进行排序。我有一个名为" users"包含成员个人资料数据和其他名为"评论"包含会员的评分反馈。我在review_count字段中为评论表存储0到5的评级。
现在我想根据这些优先级对用户个人资料进行排序:
表"用户"是这样的:
uid name picture membership_status last_login
-- ---------- ---------- ----------------- ------------------
1 Jhon jhon.jpg 1 2014-07-16 04:40:05
2 Ravi 0 2014-07-09 10:18:38
3 Lucy lucy.jpg 0 2014-07-07 11:46:53
4 Sweta 1 2014-07-07 11:46:53
5 Philip philip.jpg 0 2014-07-09 10:31:53
表评论是这样的:
id review_by review_to review_count
----- ----------- --------- ------------
1 8 1 5
2 12 2 3
3 22 5 4
现在我想以低于优先级的方式对这些数据进行排序:
这是我正在使用的查询:
$sel_profiles = mysql_query("SELECT a.*,
b.review_to
FROM users a
LEFT JOIN reviews AS b ON b.review_to = a.uid
ORDER BY a.membership_status DESC,
b.review_count DESC,
a.picture DESC,
a.last_login DESC
LIMIT 0 ,10");
但我没有按照自己的意愿得到正确的结果。请任何人都可以建议我如何获得我想要的分组优先级输出。提前谢谢。
答案 0 :(得分:0)
$sel_profiles = mysql_query("SELECT a.*,
b.review_to
FROM users a
LEFT JOIN reviews AS b ON b.review_to = a.uid
ORDER BY a.last_login DESC ,
a.membership_status DESC
LIMIT 0 ,10");
通过这两个订购本身将获得所需的结果。
答案 1 :(得分:0)
当mysql按照图片desc排序时,这是一个按字母顺序排列的命令。你必须通过一个功能来改变图像,当有图像时返回1,不支持时返回0。案例是一个好方法。
$sel_profiles = mysql_query("SELECT a.*, b.review_to, case when a.picture is null then 1 else 0 end case DESC as isPictured FROM users a LEFT JOIN reviews AS b ON b.review_to = a.uid ORDER BY a.membership_status DESC, b.review_count DESC, isPictured DESC, a.last_login DESC LIMIT 0 ,10");
试试这个!
http://dev.mysql.com/doc/refman/5.0/fr/case-statement.html
我虽然你必须重复这一点,但是<_p>
对不起我的语言,我的英语不流利