1

私はこのようないくつかのmysqlテーブルを持っています:

ブログ

  • entry_id
  • member_d

記事

  • entry_id
  • member_d

投稿

  • entry_id
  • member_d

特定のメンバーによるエントリーの総数を数えたい。私は現在これを持っています(この例では3つのテーブルしか使用していませんが、実際には約10〜20のテーブルがすべて同じ構造になっています):

SELECT COUNT('member_id') FROM blogs WHERE member_id=3 LIMIT 1;
SELECT COUNT('member_id') FROM articles WHERE member_id=3 LIMIT 1;
SELECT COUNT('member_id') FROM posts WHERE member_id=3 LIMIT 1;

繰り返しが見えますか?たとえば、それを1つのクエリに凝縮する方法はありますか(これは機能するのではないかと思います)。

SELECT COUNT(blogs.'member_id') as total_blogs, 
COUNT(articles.'member_id') as total_articles, 
COUNT(posts.'member_id') as total_posts  
FROM blogs,articles,posts WHERE member_id=3 LIMIT 1;

PSスタックオーバーフローとグーグルを検索しようとしましたが、COUNT(*)の使用やグループの使用などについての情報を取得し続けています...

4

3 に答える 3

1

この作品、

SELECT  
(SELECT COUNT('member_id') FROM blogs WHERE member_id=3) as total_blogs,
(SELECT COUNT('member_id') FROM articles WHERE member_id=3) as total_articles,
(SELECT COUNT('member_id') FROM posts WHERE member_id=3) as total_posts

たった1つのレコードですべての情報を提供します

于 2012-11-22T19:09:33.527 に答える
0

念のため、1回のクエリでIDの複数選択を許可する2番目のソリューションをここに追加します

SELECT m.member_id, 
       COALESCE(blogs.total_blogs,0)       as total_blogs, 
       COALESCE(articles.total_articles,0) as total_articles, 
       COALESCE(posts.total_posts,0)       as total_posts
FROM   members  m     -- I guess this table exists 
LEFT JOIN (SELECT member_id, COUNT('member_id') as total_blogs    FROM blogs    GROUP BY member_id) as blogs     on m.member_id = blogs.member_id
LEFT JOIN (SELECT member_id, COUNT('member_id') as total_articles FROM articles GROUP BY member_id) as articles  on m.member_id = articles.member_id
LEFT JOIN (SELECT member_id, COUNT('member_id') as total_posts    FROM posts    GROUP BY member_id) as posts     on m.member_id = posts.member_id
where m.member_id in (3,4,5)

ここをいじる

于 2012-11-22T21:18:05.577 に答える
0
SELECT COUNT(*) FROM(
    SELECT member_id FROM blogs
    UNION ALL
    SELECT member_id FROM articles
    UNION ALL
    SELECT member_id FROM posts
) AS activity
WHERE member_id=3
GROUP BY member_id

Sqlfiddleのデモ:http ://sqlfiddle.com/#!2/366bd/2

于 2012-11-22T19:10:06.990 に答える