2015-06-19 4 views
0

У меня возникли проблемы с присоединением к двум таблицам mysql & получение результата, как я хочу.Присоединиться к двум таблицам и получить результаты

У меня есть две таблицы, пользователи стол & раз стол. Таблица пользователей имеет идентификатор &. таблица времени имеет user_id & minutesSpent. Я хочу получить время для всех пользователей с именем & раз столбцом в качестве результата. Но для некоторых конкретных дат все идентификаторы пользователей не указаны в таблице времени. Поэтому мне нужно иметь нулевое значение для таких пользователей.

Я пробовал несколько запросов, но каждый раз, когда я получаю время только для user_ids, доступного во временной таблице. Не получая раз другие user_id как нуль :(

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

Предложение 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` 
+0

Wow! Он работает ,, Большое спасибо –

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; 
Смежные вопросы