0
LEFT JOIN
(
    SELECT user_id, review, COUNT(user_id) totalCount
    FROM reviews
    GROUP BY user_id
) b ON b.user_id= b.user_id 

私はWHERE LENGTH(review) > 100これをどこかに収めようとしていますが、置くたびに問題が発生します。

上記のサブクエリは、すべてのレビューの合計を。でカウントしますuser_id。資格をもう1つ追加したいだけです。長さが100を超えるレビューのみをカウントします。

ちなみに、私は関数を見てきましたCHAR_LENGTH-それが私が必要なものかどうかはわかりません。

編集:

これが私のニーズに期待どおりに完全に機能する完全なクエリです。

    static public $top_users = "
            SELECT  u.username, u.score,
            (COALESCE(a.totalCount, 0) * 4) +
            (COALESCE(b.totalCount, 0) * 5) +
            (COALESCE(c.totalCount, 0) * 1)  +
            (COALESCE(d.totalCount, 0) * 2)  +
            (COALESCE(u.friend_points, 0)) AS totalScore
            FROM users u 
            LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM items 
                    GROUP BY user_id
                ) a ON a.user_id= u.user_id
            LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM reviews
                    GROUP BY user_id
                ) b ON b.user_id= u.user_id
            LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM ratings
                    GROUP BY user_id
                ) c ON c.user_id = u.user_id
             LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM comments
                    GROUP BY user_id
                ) d ON d.user_id = u.user_id

                ORDER BY totalScore DESC LIMIT 25;";
4

2 に答える 2

3

LENGTH()バイト単位で測定された文字列の長さを返します。CHAR_LENGTH()それはあなたに実際のキャラクターを与えるので、あなたはおそらく欲しいでしょう。

SELECT user_id, review, COUNT(user_id) totalCount
FROM reviews
WHERE CHAR_LENGTH(review) > 100
GROUP BY user_id, review

GROUP BYまた、正しく使用していません。

ドキュメントを参照してください

于 2013-02-22T20:42:09.300 に答える
0

必要なクエリは次のとおりです。

LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount,
                           sum(case when length(review) > 100 then 1 else 0 end
                              ) as NumLongReviews
                    FROM reviews
                    GROUP BY user_id
                ) b ON b.user_id= b.user_id 

これは、レビューと「長い」レビューの両方をカウントします。そのカウントはcase、関数にネストされたステートメントを使用して行われsum()ます。

于 2013-02-22T21:29:26.820 に答える