加入了两张桌子和一张桌子。得到结果

时间:2015-06-19 13:25:27

标签: php mysql join left-join right-join

我在加入两个mysql表时遇到了一些麻烦。得到我想要的结果。

我有两张桌子,用户桌子和桌子时间表。用户表有id&名称 。时间表有user_id& minutesSpent。我希望得到所有名字和用户的时间。将列作为结果集。但是对于某些特定日期,所有用户ID都不在时间表中。所以对于这样的用户我需要空值。

我已经尝试了几个查询,但每次我只获得时间表中可用的user_ids时间。没有得到其他user_id的时间为null :(

SELECT `users`.`name`,SUM(`times`.`minutesSpent`) AS `Total` 
FROM `users` 
LEFT OUTER JOIN `times`  ON `users`.`id` = `times`.`user_id`   
WHERE DATE(`date`) = '2015-06-03' 
GROUP BY `users`.`name`

&安培;我也尝试了这个查询

SELECT `users`.`name`,SUM(`times`.`minutesSpent`) AS `Total` ,CASE WHEN times.user_id IS NULL THEN 0 ELSE 1 END 
FROM `users` 
INNER  JOIN `times`  ON `users`.`id` = `times`.`user_id` AND `users`.`isTimeEnable` = 0   
WHERE DATE(`date`) = '2015-06-03' 
GROUP BY `users`.`name`

如果有人帮我这个,那就太好了。 谢谢

2 个答案:

答案 0 :(得分:2)

您的WHERE子句将左连接转换为内连接。试试这个:

   SELECT `users`.`name`,SUM(`times`.`minutesSpent`) AS `Total` 
    FROM `users` 
    LEFT OUTER JOIN `times`  ON `users`.`id` = `times`.`user_id`   
      AND DATE(`date`) = '2015-06-03' 
    GROUP BY `users`.`name`

答案 1 :(得分:0)

顺便提一下,如果你打算减少打字(20个字符)和更好的表现,那么请考虑以下几点:

SELECT u.name
     , SUM(t.minutesSpent) Total 
  FROM users u 
  LEFT 
  JOIN times t
    ON u.id = t.user_id   
   AND t.date BETWEEN '2015-06-03 00:00:00' AND '2015-06-03 23:59:59' 
 GROUP 
    BY u.name;