簡體   English   中英

如何通過分組優先級對MySQL數據進行排序

[英]How to sort MySQL data by grouping priority

我試圖在分組優先級的基礎上用php對mysql數據進行排序。 我有一個名為“ users”的表,其中包含成員個人資料數據,其他名為“ reviews”的表,包含成員的評分和反饋。 我在評論表的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. 上次登錄的其他成員

這是我正在使用的查詢:

$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

我雖然也要重復一遍

對不起,我的語言,我的英語不太流利

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM