2014-07-16 129 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太

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

相關問題