我试图在分组优先级的基础上用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
现在我想根据以下优先级对这些数据进行排序:
- 上次登录的高级会员
- 已审核上次登录的成员
- 具有上次登录的照片配置文件的成员
- 上次登录的其他成员
这是我正在使用的查询:
$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
我想你必须重复一遍才能复习——太了
对不起,我的语言不流利。