2012-04-20 154 views
1

所以我現在正在爲我們的開發人員填充(被警告我是初學者),但我試圖簡單地將我的搜索結果按照包含個人資料圖片的個人資料排序(即, t要空白的個人資料圖片顯示在結果的頂部...他們應該都在結果的最後)...請注意,有幾個用戶類型,這就是爲什麼有這麼多的代碼...如何按照頂部的個人資料圖片進行分類?

我敢肯定,我要去哪裏錯的是2號線...

ORDER BY $爲了u.picture ISNULL DESC「; (這涉及按個人資料圖片排序)。真的很感激任何和所有的幫助...... thx!

的代碼如下:

if ($user_type == 1) { 
     $sql = "SELECT a.*, u.*, 
       (SELECT COUNT(DISTINCT userId) FROM LF_usertype_A WHERE usertype_BId = u.userId AND status = 1) as i_cnt, 
       (SELECT COUNT(productId) FROM LF_products WHERE userId = u.userId AND status = 1) as product_cnt, 
       (SELECT COUNT(transactionId) 
        FROM LF_Transactions 
        WHERE usertypeBId = u.userId 
         AND (status = 1 OR status = 2) 
         AND type = 9 
         AND userId != usertypeBId 
         AND userId != usertypeAId) AS cnt 
       FROM LF_Users u 
       JOIN LF_products a ON a.userId = u.userId 
       LEFT JOIN LF_Transactions t ON t.productId = a.productId 
       WHERE a.status = 1 
        AND u.status = 1 
        AND u.userType = :ut $where 
       GROUP BY u.userID 
       ORDER BY $order u.name DESC LIMIT 200"; 
    } elseif ($filter != "recent" && $user_type == 2) { 
     $sql = "SELECT u.*, 
       (SELECT COUNT(a.productId) FROM LF_usertypeA a INNER JOIN LF_products ON a.productId = m.productId INNER JOIN LF_Users uu ON uu.userId = a.usertypeAId WHERE a.userId = u.userId AND uu.status = 1 AND a.status = 1 AND m.status = 1) as product_cnt, 
       (SELECT COUNT(transactionId) 
        FROM LF_Transactions 
        WHERE usertypeBId = u.userId 
         AND (status = 1 OR status = 2) 
         AND type = 9 
         AND userId != usertypeAId 
         AND userId != usertypeBId) AS cnt 
       FROM LF_Users u 
       LEFT JOIN LF_Transactions t ON t.usertypeBId = u.userId 
       WHERE u.status = 1 
        AND u.userId != 1 
        AND u.userType = :ut $where 
       GROUP BY u.userID 
       ORDER BY $order u.name DESC LIMIT 200 
       ORDER BY $order u.picture ISNULL DESC"; 
    } else { 
     $sql = "SELECT u.*, 
       (SELECT COUNT(a.productId) FROM LF_usertype_A a INNER JOIN LF_products m ON a.productId = m.productId INNER JOIN LF_Users uu ON uu.userId = a.usertypeAId WHERE a.userId = u.userId AND uu.status = 1 AND a.status = 1 AND m.status = 1) as product_cnt, 
       (SELECT COUNT(transactionId) 
        FROM LF_Transactions 
        WHERE usertypeBId = u.userId 
         AND (status = 1 OR status = 2) 
         AND type = 9 
         AND userId != usertypeAId 
         AND userId != usertypeBId) AS cnt 
       FROM LF_Users u 
       WHERE u.status = 1 
       AND u.userId != 1 
       AND u.userType = :ut $where 
       GROUP BY u.userID 
       ORDER BY $order u.name DESC LIMIT 200 
     ORDER BY $order u.picture ISNULL DESC"; 
    } 

回答

1

你將有你的規則排序順序之前把isnull條件,如果你希望它的優先級:

ORDER BY ISNULL(u.picture), $order 
+0

感謝吉榮,你可以給我想了解代碼中的哪些地方......我是tyring ORDER BY ISNULL(u.picture),$ order u.name DESC LIMIT 200.那個地方靠近嗎?我認爲它在'GROUP BY'行之後仍然存在,對嗎?謝謝! – BennyB 2012-04-20 17:51:11

+1

@BennyB你有不同的sql語句,其中一些似乎有多個'ORDER BY'子句。你只能在你的sql語句中有一個'ORDER BY'子句,並且你首先想要那些帶有圖像的子句,你必須以'ISNULL(u.picture)'開頭。 – jeroen 2012-04-20 17:53:01

+0

有問題,所以重複的ORDER BY子句是問題。欣賞它! – BennyB 2012-04-20 17:55:25