【问题标题】:Using count in in query with left join在带有左连接的查询中使用计数
【发布时间】:2020-02-16 01:17:45
【问题描述】:

我目前正在尝试计算用户对我网站上的图像的不喜欢和喜欢的次数,在下面您将看到我为此所做的数据库设置。 Vote_type 保存好恶信息,1 表示喜欢,0 表示不喜欢。

此表称为项目 Project table

此表名为 projects_votes

现在,当我进行查询以从我的数据库中拖动信息以获取博客文章时,我想将其包括在内。这是当前我为获取必要信息以在首页上显示博客列表而进行的查询。在这里,我得到了上传者、链接的项目 ID 等等。

    $query = "  
SELECT * FROM projects
LEFT JOIN users
ON fk_usr_id = usr_id
LEFT JOIN projects_maps
ON fk_project_id = project_id    
ORDER BY RAND()
";

所以我很难理解的是如何计算我在特定博客上的喜欢和不喜欢,所以我可以在我的网站上显示这些信息。

【问题讨论】:

  • 构建一个查询,显示vote_type 列的SUM 对应于您的fk_project_id 中的每个项目值。
  • “如何计算我在特定博客上的喜欢和不喜欢” 输入和输出到底是什么?你能做哪些部分? PS请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)How to Ask 适用于包含 DBMS 和 DDL 的 SQL,其中包括约束、索引和表格初始化。
  • @philipxy 嗨菲利普。我已经添加了两个要相互交互的表。
  • 我刚刚提供了一个指向 minimal reproducible example 的链接,我在评论中为你总结了很明显你的帖子中仍然没有。 PS请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图像中包含图例/键和说明。在您的帖子中包含提出问题所需的所有内容。 PS 在 COUNT() 处尝试一下。

标签: php mysql count left-join


【解决方案1】:

我通过在此处将查询更改为此语句解决了我的问题。

$query = "  
    SELECT project_id, usr_publicname, project_name, photofile_name, map_version, usr_publicname, map_date, project_id AS project, (SELECT COUNT(*) FROM projects_votes WHERE vote_type = 1) AS likes, 
    (SELECT COUNT(*) FROM projects_votes WHERE vote_type = 0) AS dislikes FROM projects 

    LEFT JOIN projects_votes ON fk_project_id = project_id 

    LEFT JOIN users ON projects.fk_usr_id = usr_id 
    LEFT JOIN projects_maps ON projects_maps.fk_project_id = projects.project_id
    LEFT JOIN photos ON photos.fk_project_id = projects.project_id

    GROUP BY project_id ORDER BY RAND()
";

【讨论】:

    【解决方案2】:

    也许是这样的?

    SELECT project_id,
           sum(case when vote_type = 1 then 1 else 0 end) likeCount,
           sum(case when vote_type = 0 then 1 else 0 end) dislikeCount
    FROM projects
    LEFT JOIN users ON fk_usr_id = usr_id
    LEFT JOIN projects_maps ON fk_project_id = project_id   
    GROUP BY  project_id
    

    【讨论】:

    • 注意,在MySQL中,可以省略case when then 1 else 0 end
    • 我想我忘了包括我共享的表名为 projects_votes
    • 我解决了我的问题,我刚刚发布了我的解决方案。或许你可以去看看,看看你觉得是不是一个好的解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2019-05-24
    相关资源
    最近更新 更多