1

だから私は今のところ開発者のために記入しています(注意してください-私は初心者です)が、私は単にプロフィール写真が含まれているプロフィールで検索結果を並べ替えようとしています(つまり、私はしたくない結果の上部に表示される空白のプロフィール写真...すべて結果の最後に表示されるはずです)...いくつかのユーザータイプがあることに注意してください。これが、コードが非常に多い理由です...

私が間違っているのは2行だとかなり確信しています...

ORDER BY $ order 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";
    }
4

1 に答える 1

1

isnull優先する場合は、通常の並べ替え順序の前に条件を配置する必要があります。

ORDER BY ISNULL(u.picture), $order
于 2012-04-20T17:28:20.033 に答える