这个查询有什么问题:

SELECT co.*, mod.COUNT(*) as moduleCount, vid.COUNT(*) as vidCount
 FROM courses as co, modules as mod, videos as vid
 WHERE mod.course_id=co.id AND vid.course_id=co.id ORDER BY co.id DESC

换言之,我如何才能做到这一点,从“课程”返回的每一张记录都有
一个名为“modcount”的附加列显示该课程的modules表中的记录数,另一个名为“vidcount”的列对videos表执行相同的操作。
错误:
错误号:1064
您的SQL语法有错误;
检查对应的手册
您的mysql服务器版本
使用near)作为的正确语法
moduleCount,vid.count()作为vidCount
从CO课程开始,在第1行

最佳答案

使用子选择可以执行以下操作:

SELECT co.*,
    (SELECT COUNT(*) FROM modules mod WHERE mod.course_id=co.id) AS moduleCount,
    (SELECT COUNT(*) FROM videos vid WHERE vid.course_id=co.id) AS vidCount
FROM courses AS co
ORDER BY co.id DESC

但是要小心,因为当课程有很多行时,这是一个昂贵的查询。
编辑:
如果您的表很大,那么下面的查询应该能更好地执行(有利于更复杂的阅读和理解)。
SELECT co.*,
    COALESCE(mod.moduleCount,0) AS moduleCount,
    COALESCE(vid.vidCount,0) AS vidCount
FROM courses AS co
    LEFT JOIN (
            SELECT COUNT(*) AS moduleCount, course_id AS courseId
            FROM modules
            GROUP BY course_id
        ) AS mod
        ON mod.courseId = co.id
    LEFT JOIN (
            SELECT COUNT(*) AS vidCount, course_id AS courseId
            FROM videos
            GROUP BY course_id
        ) AS vid
        ON vid.courseId = co.id
ORDER BY co.id DESC

关于sql - 多个表上的Mysql COUNT(*),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/944099/

10-13 01:00