-2

我有这个 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

4 回答 4

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;
于 2013-08-19T14:51:59.317 回答
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;
于 2013-08-19T15:16:30.303 回答
1

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

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

于 2013-08-19T14:51:04.003 回答
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;
于 2013-08-19T14:51:41.120 回答