根据父ID计算子选择元素

时间:2013-08-19 14:47:31

标签: mysql sql subquery mariadb

我正在使用这个MySQL查询

            SELECT
                    t1.article_id,
                    t1.user_id,
                    t1.like_date,
                    (
                        SELECT
                                COUNT(*)
                            FROM liketbl t2
                            WHERE
                                t1.article_id=t2.article_id
                ) as totallike
            FROM    liketbl t1
            WHERE
                user_id = 1;

我需要在一次运行中获得文章ID,用户ID和喜欢的日期以及总条目数。 在我看来,子选择最容易实现这一点。 (不想在客户端环境中运行多个查询。 但是没有用。 不知道为什么,帮助被激活了。

4 个答案:

答案 0 :(得分:1)

我的猜测是你需要在子查询中过滤user_id = 1以获得你期望的结果。

where仅对外部选择进行操作。

答案 1 :(得分:1)

这应该有效

 SELECT
                    t1.article_id,
                    t1.user_id,
                    t1.like_date,
                    count(SELECT * FROM liketbl t2 WHERE
                                t1.article_id=t2.article_id ) as totallike
            FROM    liketbl t1
            WHERE
                user_id = 1;

答案 2 :(得分:1)

试试这个:

SELECT  t1.article_id,
        t1.user_id,
        t1.like_date,
        COUNT(*) as totallike
FROM liketbl t1 inner join liketbl t2 on t1.article_id=t2.article_id
WHERE user_id = 1
group by t1.article_id,t1.user_id,t1.like_date;

答案 3 :(得分:1)

标量子查询往往是最糟糕的情况,重写它们通常更有效。

根据两个表中的行数,这是使用派生表的另一种方法:

SELECT
   t1.article_id
   ,t1.user_id
   .t1.like_date
   ,t2.totallike
FROM liketbl t1
JOIN
 (
   SELECT
      article_id
      ,COUNT(*) AS totallike
   FROM liketbl
   GROUP BY article_id
 ) AS t2
ON t1.article_id=t2.article_id
WHERE
   user_id = 1;