如何通过分组优先级对MySQL数据进行排序


How to sort MySQL data by grouping priority

我试图在分组优先级的基础上用php对mysql数据进行排序。我有一个名为"用户"的表,其中包含成员的个人资料数据,另一个名"评论"的表包含成员的反馈和评级。我在review_count字段中为reviews表存储从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. 上次登录的其他成员

这是我正在使用的查询:

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

但我并没有得到我想要的正确结果。请任何人都能建议我如何在分组优先级的情况下获得我想要的输出。提前谢谢。

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

通过这两个命令本身将获得所需的结果。

当mysql按图片desc排序时,这是一个字母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

我想你必须重复一遍才能复习——太了

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