Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用两个连接和一个计数的mysql搜索_Mysql_Join_Count - Fatal编程技术网

使用两个连接和一个计数的mysql搜索

使用两个连接和一个计数的mysql搜索,mysql,join,count,Mysql,Join,Count,我目前正在尝试编写一个通用查询,它返回1个表和另一个联接表的内容以及第三个表的结果行数 现在,我的描述可能看起来很抽象,所以我将尝试将其形象化 表: posts | ID | title | description | creator_id | 1 Title1 Descr1 1 2 Title2 Descr2 1 users | ID | name | avatar |

我目前正在尝试编写一个通用查询,它返回1个表和另一个联接表的内容以及第三个表的结果行数

现在,我的描述可能看起来很抽象,所以我将尝试将其形象化

表:

posts
|  ID  |  title  |  description |  creator_id  |
   1      Title1    Descr1             1
   2      Title2    Descr2             1

users
|  ID  |  name  |  avatar |
   1      User1    PATH

interactions
|  ID  |  type  |  target_id  |  identifier  |
   1      view       1             IP
   2      view       1             IP
现在我想要的是这样的输出:

|  ID  |  title  |  description  |  name  |  avatar  |  view_count  |
   1      Title1    Descr1          User1    PATH           2
   2      Title2    Descr2          User1    PATH           0
|  ID  |  title  |  description  |  name  |  avatar  |  view_count  |
   1      Title1    Descr1          User1    PATH           2
我当前的查询如下所示:

SELECT 
    posts.id, posts.title, posts.description,
    users.name, users.avatar,
    COUNT(interactions.id) AS view_count
FROM
    posts
LEFT JOIN
    users
    ON
        posts.creator_id = users.id
LEFT JOIN
    interactions
    ON
        posts.id = interactions.target_id
但只打印出posts结果,其交互如下:

|  ID  |  title  |  description  |  name  |  avatar  |  view_count  |
   1      Title1    Descr1          User1    PATH           2
   2      Title2    Descr2          User1    PATH           0
|  ID  |  title  |  description  |  name  |  avatar  |  view_count  |
   1      Title1    Descr1          User1    PATH           2
我需要如何修改查询以同时获得碰巧还没有任何交互的其他行

谢谢你的帮助

试试这个:

SELECT P.ID
    , P.title
    , P.description
    , U.name
    , U.avatar
    , IFNULL(COUNT(I.ID), 0) AS view_count
    FROM posts P
    LEFT JOIN users U ON U.ID = P.creator_id
    LEFT JOIN interactions I ON I.target_id = P.ID
    GROUP BY P.ID
你好像错过了这个条款。如果没有这一点,当您使用像COUNT这样的聚合函数时,会显示:

只有一个组,它是不确定的 要为组选择哪个名称值

这就是查询仅返回1行的原因。

请尝试以下操作:

SELECT P.ID
    , P.title
    , P.description
    , U.name
    , U.avatar
    , IFNULL(COUNT(I.ID), 0) AS view_count
    FROM posts P
    LEFT JOIN users U ON U.ID = P.creator_id
    LEFT JOIN interactions I ON I.target_id = P.ID
    GROUP BY P.ID
你好像错过了这个条款。如果没有这一点,当您使用像COUNT这样的聚合函数时,会显示:

只有一个组,它是不确定的 要为组选择哪个名称值

这就是查询只返回1行的原因。

试试这个

select posts.id, posts.title, posts.description, users.name, users.avatar, coalesce(t3.view_count, 0) as view_count
from posts 
left join users on posts.creator_id = users.id
left join (
    select target_id, count(1) as view_count from interactions group by target_id
) t3 on posts.id = t3.target_id
试试这个

select posts.id, posts.title, posts.description, users.name, users.avatar, coalesce(t3.view_count, 0) as view_count
from posts 
left join users on posts.creator_id = users.id
left join (
    select target_id, count(1) as view_count from interactions group by target_id
) t3 on posts.id = t3.target_id

您只需子查询第三个表即可计算条目数:

SELECT 
    posts.id, posts.title, posts.description,
    users.name, users.avatar,
    (SELECT COUNT(*) FROM interactions i WHERE i.target_id = posts.id) AS view_count
FROM
    posts
LEFT JOIN
    users
    ON
        posts.creator_id = users.id

这也有助于提高性能没有组,没有未优化的联接

您只需子查询第三个表即可计算条目:

SELECT 
    posts.id, posts.title, posts.description,
    users.name, users.avatar,
    (SELECT COUNT(*) FROM interactions i WHERE i.target_id = posts.id) AS view_count
FROM
    posts
LEFT JOIN
    users
    ON
        posts.creator_id = users.id

这对性能也有好处没有组,没有未优化的联接

你能在这里以小提琴的形式提供示例数据吗?@10086 User2是一个键入错误。@noa dev,只是在你的查询中按posts.id添加了这个组,那么它会很好地工作。你能在这里用小提琴提供示例数据吗?@10086 User2是一个键入错误。@noa dev,刚刚在你的查询中通过posts.id添加了这个组,那么它会工作得很好。仍然只有一行的结果:那不可能。您的数据或其他地方一定有问题。仍然只有一行的结果:不可能。您的数据或其他地方一定有问题。这会打印出相同的POST行,打印的次数与打印的行数相同are@noa-dev请再试一次,或者检查sqlfiddle链接。这会打印出相同的posts行,打印的次数与那里的相同are@noa-dev请再试一次,或者检查sqlfiddle链接。谢谢大家,寻求反馈。很高兴帮助您谢谢大家的反馈。很高兴帮助你