MYSQL在同一查询中对不同表进行求和

时间:2013-10-22 15:15:14

标签: php mysql sql count sum

我试图得到一些统计数据;来自3个不同表格的总链接,用户和视图。 我在尝试什么:

SELECT SUM(p.views), COUNT(c.id), COUNT(u.id)
FROM studenkel_userprefs as p, studenkel_content as c, studenkel_users as u

如果我在三个不同的查询中单独执行它们,它们可以正常工作,但是结果会比我想要的结果高出几千倍。我猜他们会以某种方式相互增加,提示?

由于

编辑:谢谢大家,真的很感谢你的帮助,整理出来。

3 个答案:

答案 0 :(得分:2)

你在自己身上所做的事情被称为没有标准的隐式内部联接。

这意味着您的最终视图有p.rows * c.rows * u.rows行,这就是您获得奇怪结果的原因。

如果您有3个问题,请单独询问,而不是一次性问。

或者,如果你真的只想要一个请求,你可以选择丑陋的东西:

SELECT
  SELECT SUM(views) FROM studenkel_userprefs as "sum_userprefs",
  SELECT COUNT(id) FROM studenkel_content as "cnt_content",
  SELECT COUNT(u.id) FROM studenkel_users as "cnt_users"
FROM DUAL;

答案 1 :(得分:0)

你被允许“欺骗”吗?

SELECT
    (
        SELECT 
            SUM(p.views)
        FROM 
            studenkel_userprefs as p
    ) as `views`,
    (
        SELECT
            COUNT(c.id)
        FROM
            studenkel_content as c
    ) as `content_count`,
    (
        SELECT
            COUNT(u.id)
        FROM
            studenkel_users as u
    ) as `user_count`

答案 2 :(得分:0)

这是因为您正在对表进行笛卡尔连接,这会将一个表中的行数乘以每个其他表中的行数。如果不以JOIN ... ON格式指定联接或通过在WHERE子句中指定联接条件,则这是您将获得的唯一结果。