【问题标题】:SELECT data and COUNT comments in other mySql table在其他 mySql 表中选择数据和 COUNT 条评论
【发布时间】:2011-03-15 17:25:25
【问题描述】:

您好,感谢您对此进行调查。

此时我有以下疑问:

SELECT videos.video_genre_id, videos.username, videos.title, videos.slugTitle, videos.link, videos.tags, videos.date_added, video_genre.video_genre_id, video_genre.video_genre

FROM videos, video_genre
WHERE videos.accepted = 'y'
AND videos.video_genre_id = video_genre.video_genre_id
ORDER BY  videos.date_added DESC

工作正常。但我想计算每个视频的总 cmets。我有另一个名为“video_cmets”的表,其中包含以下字段:

video_comments_id 
videos_id 
comment

使用一个查询并获取每个视频的总 cmets 的最佳解决方案是什么?我以前从未使用过 COUNT,所以我不知道从哪里开始。

提前致谢。

编辑:

“videos”表具有“videos_id”字段作为主要字段。

编辑 2:

我想我得到了答案:

    SELECT (select count(*) from video_comments AS total), videos.video_genre_id, videos.username, videos.title, videos.slugTitle, videos.link, videos.tags, videos.date_added, video_genre.video_genre_id, video_genre.video_genre
FROM videos, video_genre
WHERE videos.accepted = 'y'
AND videos.video_genre_id = video_genre.video_genre_id
ORDER BY  videos.date_added DESC

唯一的问题是我似乎无法将“总计”作为一行来显示总 cmets。

【问题讨论】:

  • 从视频中选择 COUNT(*) 个,按视频 ID 分组
  • 谢谢大家,但就像您在我的第二次编辑中看到的那样,我正在尝试获取每个视频的 cmets 总数!这种方式在 mysql 中工作正常,但我无法回显该行以显示 cmets 的总数。
  • 与您的问题无关的建议:尝试在表格和字段名称中使用单数。你现在在某些地方有复数(videosvideos_id),在其他地方有单数(video_genre),在其他地方有混合(video_commentsvideos.title

标签: mysql


【解决方案1】:

类似

SELECT videos.video_genre_id, videos.username, videos.title, videos.slugTitle, videos.link, videos.tags, videos.date_added, video_genre.video_genre_id, video_genre.video_genre, COUNT(video_comments.videos_id) FROM videos INNER JOIN video_genre ON videos.video_genre_id = video_genre.video_genre_id LEFT JOIN video_comments ON video.id = video_comments.videos_id WHERE videos.accepted = 'y' GROUP BY videos.video_genre_id, videos.username, videos.title, videos.slugTitle, videos.link, videos.tags, videos.date_added, video_genre.video_genre_id, video_genre.video_genre ORDER BY videos.date_added DESC

我还没有测试过,但就是这样!

【讨论】:

  • 谢谢约翰。这在 mysql 数据库中尝试时起到了作用。仍然需要弄清楚如何在 PHP 中回显总 cmets。
  • 只需将COUNT(video_comments.videos_id) 更改为COUNT(video_comments.videos_id) AS commentCount。一切顺利,您应该可以在 PHP 中使用commentCount
  • 真的很奇怪。在您发布您的解决方案之前,我尝试了相同的解决方案,但没有成功。但是现在它工作正常。我想我忘记了什么。感谢您的帮助约翰! :)
  • 这会起作用,但没有必要在所有这些列上GROUP BY。只有那些唯一标识组(videosvideo_genre 表的主键)就足够了。
【解决方案2】:
SELECT videos.video_genre_id
     , videos.username
     , videos.title
     , videos.slugTitle
     , videos.link
     , videos.tags
     , videos.date_added
     , video_genre.video_genre_id
     , video_genre.video_genre
     , COUNT(video_comments.video_comments_id) AS totalcomments
    FROM videos
        JOIN video_genre
            ON videos.video_genre_id = video_genre.video_genre_id
        JOIN video_comments
            ON video_comments.videos_id = videos.videos_id
    WHERE videos.accepted = 'y'
    GROUP BY videos.videos_id
           , video_genre.video_genre_id
    ORDER BY videos.date_added DESC
;

如果您希望也显示没有 cmets 的视频(totalcmets 为 0),请将 JOIN video_comments 更改为 LEFT JOIN video_comments

【讨论】:

  • 这可能会失败,因为 SQL 语法检查器没有看到结果中的其他字段在每个组中具有唯一值。请参阅 Johann 的修改答案。
  • @reinierpost:我在完成之前点击了提交。它现在应该可以工作了。
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多