如何通过分组优先级来排序MySQL数据

时间:2014-07-16 07:21:06

标签: php mysql database sorting

我试图在分组优先级的基础上用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

现在我想以低于优先级的方式对这些数据进行排序:

  1. 上次登录的高级会员
  2. 审核了上次登录的会员
  3. 拥有上次登录的照片资料的会员
  4. 上次登录的其他成员
  5. 这是我正在使用的查询:

    $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");
    

    但我没有按照自己的意愿得到正确的结果。请任何人都可以建议我如何获得我想要的分组优先级输出。提前谢谢。

2 个答案:

答案 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>

对不起我的语言,我的英语不流利