2个表上的Mysql内连接不起作用

时间:2014-10-28 17:58:09

标签: php mysql inner-join

我的数据库中有一个名为contacts的表和一个名为views的表。

在表格联系人上,我有以下字段:

  • ID
  • 状态
  • 如first_name
  • 姓氏

状态可能很冷,前景不好或丢失。

在表格视图中,我有以下字段:

  • USER_ID
  • art_views
  • art_title

这两个表之间的关系是id和user_id。

我需要一个查询来创建一个包含以下列的新html表:

  • art_title
  • 前景
  • 丢失

现在我有以下查询(更新):

SELECT
v.art_title,
SUM(CASE c.status WHEN 'cold' THEN v.art_views ELSE 0 END) cold,
SUM(CASE c.status WHEN 'prospect' THEN v.art_views ELSE 0 END) prospect,
SUM(CASE c.status WHEN 'lost' THEN v.art_views ELSE 0 END) lost
FROM views v
JOIN contacts c ON v.user_id = c.id
GROUP BY v.art_title

此查询现在正在运行(感谢Gerv),但我仍然有没有状态的用户。所以我将“views”中的字段user_id留空。如何更改这些用户的查询,以便我也可以计算它们?

我试过:SUM(CASE v.user_id WHEN''那么v.art_views ELSE 0 END)测试, 但这里没有结果。

2 个答案:

答案 0 :(得分:1)

您可以通过从views表中选择并加入de contacts表来切换逻辑。 下面的查询将使用CASE子句

来转动状态
SELECT
    v.art_title,
    SUM(CASE c.status WHEN 'cold' THEN v.art_views ELSE 0 END) cold,
    SUM(CASE c.status WHEN 'prospect' THEN v.art_views ELSE 0 END) prospect,
    SUM(CASE c.status WHEN 'lost' THEN v.art_views ELSE 0 END) lost,
    SUM(CASE c.status WHEN NULL THEN v.art_views ELSE 0 END) no_user
FROM views v
LEFT JOIN contacts c ON v.user_id = c.id
GROUP BY v.art_title
ORDER BY (cold+lost+prospect+no_user) DESC
LIMIT 10

答案 1 :(得分:0)

尝试

SELECT art_title, SUM(art_views), status FROM contacts AS c INNER JOIN views AS v ON v.user_id = c.id GROUP BY v.art_title, c.status