2013-07-03 5 views
0

У меня есть три таблицы:Mysql считать с 3 таблицами

пользователей: идентификатор, имя
сдвиги: И.Д., date_start, date_end
users_shifts: user_id, shift_id

Я хочу чтобы получить всех пользователей, которые сделали n сдвиги в определенный диапазон дат, где n может быть любым целым числом (также 0!).

не

я могу получить все пользователи с числом смен они сделали так:

SELECT 
    users.*, 
    COUNT(users_shifts.user_id) AS nr_shifts 
FROM 
    users 
LEFT JOIN 
    users_shifts ON users.id = users_shifts.user_id 
GROUP BY 
    users.id 

Я имею ни малейшего понятия, как:
1) добавить диапазон дат этого запроса
2) ограничьте результаты до конкретных nr_shifts

Любая помощь с благодарностью.

+0

Все еще борются? Предоставьте sqlfiddle. – Strawberry

ответ

0
SELECT 
users.*, 
COUNT(users_shifts.user_id) AS nr_shifts 
FROM 
users 
LEFT JOIN 
users_shifts ON users.id = users_shifts.user_id 
WHERE shifts.date_end = '10/OCT/2012' 
GROUP BY 
users.id 
Order by users.id 
LIMIT 10 
0

Второе соединение не подходит для вас?

SELECT 
    users.*, 
    COUNT(users_shifts.user_id) AS nr_shifts 
FROM 
    users 
LEFT JOIN 
    users_shifts ON users.id = users_shifts.user_id 
LEFT JOIN 
    shifts ON shifts.id = users_shifts.shift_id 
WHERE 
    shifts.date_start BETWEEN 2013-06-01 and 2013-06-30 
    OR ISNULL(shifts.date_start) 
GROUP BY 
    users.id 
+0

Это работает для диапазона дат, но теперь я получаю только результаты, когда пользователь имеет хотя бы одну смену. Я хочу только пользователей с определенным количеством сдвигов (что также может быть 0). –

+0

извинения, оставшиеся во второй половине предложения where. Он сейчас там. – Joe

Смежные вопросы