0

次の 2 つのテーブルを持つプロジェクトに取り組んでいます: users_fbposts

コードをいじって 3 時間過ごした後、あきらめました。

表: 投稿

+-----+---------+---------+---------+---------+-----------+
| id  | by_user | by_page |  votes  | status  |    time   |
+-----+---------+---------+---------+---------+-----------+
|   1 |       1 |       0 |      20 |       1 | 372041014 |
+-----+---------+---------+---------+---------+-----------+

テーブル: users_fb

+-----+-----------+-------+---------+--------+-------+
| id  | username  | name  | gender  | fb_id  | email |
+-----+-----------+-------+---------+--------+-------+

SELECT username, 
        (
        SELECT      COUNT(b.by_user)
        FROM        users_fb a LEFT JOIN posts b ON a.id = b.by_user
        WHERE       b.by_page = '0'
        GROUP BY    a.username
        ) AS totalCount ,
        (
        SELECT      IFNULL(SUM(b.votes),0)
        FROM        users_fb a LEFT JOIN posts b ON a.id = b.by_user
        GROUP BY    users_fb.id
        ) AS total_votes
        FROM users_fb ORDER BY  total_votes DESC

望ましい出力

+-------------------+-------------+-------------+
|     username      | totalCount  | total_votes |
+-------------------+-------------+-------------+
| user4             |          1  |          25 |
| user1             |          0  |          0  |
| user2             |          0  |          0  |
| user3             |          0  |          0  |
+-------------------+-------------+-------------+

残念ながら、これは私が得ているものです

+-------------------+-------------+-------------+
|     username      | totalCount  | total_votes |
+-------------------+-------------+-------------+
| user4             |          1  |          25 |
| user1             |          1  |          25 |
| user2             |          1  |          25 |
| user3             |          1  |          25 |
+-------------------+-------------+-------------+

さらに情報が必要な場合は、お知らせください。ご協力いただきありがとうございます。

4

5 に答える 5

1

かなりの数の問題がありますが、最大の問題は、「メイン クエリ」と「サブクエリ」を結合していないことです。

最後に、そのようなものがより良いはずです。

SELECT
a.username,
SUM (CASE WHEN b.by_page IS NOT NULL and b.by_page = '0' then 1 else 0 end) as cnt,
SUM (IFNULL(b.votes),0) as nbVotes,
FROM  users_fb a 
LEFT JOIN posts b ON a.id = b.by_user
GROUP BY    users_fb.id
于 2013-07-02T12:25:36.567 に答える
1

選択のマッチングを行っていないため (つまり、それらの間にバインディング WHERE がない)、MySQL はそれらを一緒に表示するのを待ちません。

次のようにする必要があります。

    SELECT username, totalCount.count, total_votesGROUPED.sum
    FROM users_fb
    LEFT JOIN (
       SELECT      COUNT(b.by_user) as count, a.username
       FROM        users_fb a LEFT JOIN posts b ON a.id = b.by_user
       WHERE       b.by_page = '0'
       GROUP BY    a.username
    ) AS totalCount ON totalCount.username = users_fb.username,
    (
       SELECT      IFNULL(SUM(b.votes),0) as sum, id
       FROM        users_fb a LEFT JOIN posts b ON a.id = b.by_user
       GROUP BY    users_fb.id
    ) AS total_votesGROUPED ON total_votesGROUPED.id = users_fb.id
    ORDER BY  total_votes DESC

もう少し情報があれば、テストできます

于 2013-07-02T12:26:36.673 に答える
1
SELECT      a.username,
            COUNT(b.by_user) totalCount,
            SUM(IFNULL(b.votes,0)) total_votes
FROM        users_fb a 
            LEFT JOIN posts b 
ON a.id = b.by_user
WHERE       b.by_page = '0'
GROUP BY    a.id,a.username
于 2013-07-02T12:25:26.007 に答える