3

MySqlを使用して複数のテーブルの結果カウントを1つの結果と列ごとに組み合わせたい(必要な結果を参照)が、これに関するクエリまたは最適化の方法がある場合は、これについて混乱しています。私自身、 Unionを使用したこのクエリですが、真剣に成功していません(クエリの例を参照) 。

必要な結果

post  post_comment_likes  post_comments  post_likes
2     0                   3              0

クエリ

SELECT COUNT(*) AS `post` FROM post WHERE user_id = "123456" UNION
SELECT COUNT(*) AS `post_comment_likes` FROM post_comment_likes WHERE user_id = "123456" UNION 
SELECT COUNT(*) AS `post_comments` FROM post_comments WHERE user_id = "123456" UNION
SELECT COUNT(*) AS `post_likes` FROM post_likes WHERE user_id = "123456" 
4

3 に答える 3

1
set @post = 0;
set @post_comment_likes = 0;
set @post_comments = 0;
Set @post_likes = 0;


 select count(*) into @post from .......;
 select count(*) into @post_comment_likes from ......;
 select count(*) into @post_comments from ......;
 select count(*) into @post_likes from ......;

select (@post + @post_comment_likes + @post_comments + @post_likes) ;

上記のコードでは、@ post、@ post_comment_likes、@ post_comments、@ post_likesはセッション変数であり、接頭辞として「@」文字を付け
ます。上記のコードを使用すると、各テーブルのカウントにアクセスできます。

于 2012-04-27T07:54:39.737 に答える
0
SELECT (SELECT COUNT(*) 
          FROM post 
         WHERE user_id = "123456") AS `post`
      ,(SELECT COUNT(*) 
          FROM post_comment_likes
         WHERE user_id = "123456") AS `post_comment_likes`
      ,(SELECT COUNT(*)
          FROM post_comments
         WHERE user_id = "123456") AS `post_comments`
      ,(SELECT COUNT(*)
          FROM post_likes
         WHERE user_id = "123456") AS `post_likes`

に置き換えCOUNT(*)COUNT(<some fieldname>)、ユーザーIDの変数を使用する必要があります。

于 2012-04-27T07:59:51.623 に答える
0

以下に示すmysqlクエリを試してください

SELECT
(SELECT COUNT(*) AS `post` FROM post WHERE user_id = "123456" ) AS post , 
(SELECT COUNT(*) AS `post_comment_likes` FROM post_comment_likes WHERE user_id ="123456") AS post_comment_likes,
(SELECT COUNT(*) AS `post_comments` FROM post_comments WHERE user_id = "123456") AS post_comments , 
(SELECT COUNT(*) AS `post_likes` FROM post_likes WHERE user_id = "123456" ) AS post_likes

ありがとう

于 2012-04-27T13:12:13.890 に答える