2014-07-16 41 views
0

我正在尝试使用php按分组优先级对mysql数据进行排序。我有一张名为“用户”的表格,其中包含会员个人资料数据,其他表格中包含会员的评价。我将review_count字段的评级从0到5存储在评论表中。如何通过分组优先级对MySQL数据进行排序

现在我想整理这些优先的基础上的用户配置文件:

表 “用户” 是这样的:

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

但我没有得到正确的结果,因为我想。请任何人都可以告诉我如何获得输出,因为我想分组优先。提前致谢。

回答

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

这两个订单本身会得到所需的结果。

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

我虽然你必须重复进行review_to太

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

相关问题