у меня есть три таблицы, которые я хотел бы связать в одном запросе.
Сценарий представляет собой регистр посещаемости, поэтому он записывает отметку о посещаемости для каждого собрания для каждого пользователя.
Использованы три таблицы:
«команда»:
id | fullname | position | class | hidden
1 | Team | -- | black | 1
2 | Dan S | Team Manager | green | 0
3 | Harry P | Graphic Engineer | blue | 0
«регистр»:
id | mid | uid | mark
1 | 1 | 2 | /
2 | 1 | 3 | I
3 | 2 | 1 | /
4 | 2 | 3 | /
«встречи»:
id | maintask | starttime | endtime
1 | Organise Year Ahead | 1330007400 | 1330012800
2 | Gather Ideas | 1330612200 | 1330617600
3 | TODO | 1331217000 | 1331222400
Это образец данных.Я хочу сделать следующее:
Выбрать все результаты из реестра, сгруппировать их по пользователю и отсортировать по времени начала встречи. Но, если в таблице регистров нет отметки, я хочу, чтобы она отображала «-» (можно сделать через php, если необходимо). Итак, ожидаемый результат такой:
fullname | mark | mid
Dan S | / | 1
Dan S | / | 2
Dan S | - | 3
Harry P | I | 1
Harry P | / | 2
Harry P | - | 3
Мой SQL-запрос на данный момент таков:
ВЫБРАТЬ u.
полное имя
, u.id
, r.марка
, р.середина
ОТкоманда
u ПОЛНОЕ СОЕДИНЕНИЕрегистр
r ВКЛ.uid
= u.id
LEFT JOINmeeting
m ON р.середина
= м.id
ГРУППА ПО u.id
ЗАКАЗАТЬ м.starttime
ASC
И я получаю сообщение об ошибке от MySQL:
У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии вашего сервера MySQL для правильного использования синтаксиса рядом с регистром FULL JOIN
r ON r.
uid
= u.id
LEFT JOINmeeting
m НА р.mid
= m.`id 'в строке 1
Но я не вижу в этом проблемы: S
Пожалуйста, не могли бы кто-нибудь помочь, указать мне правильное направление или дать мне возможное решение этого. Высоко оценен
Дан
Ответ: Сработавший запрос:
SELECT
u.fullname, u.id as uid,
if(r.uid = u.id, r.mark, '-') as mark,
if(r.uid = u.id, r.mid, '-') as mid,
r.mid, m.starttime
FROM
team u
CROSS JOIN
register r ON u.id = r.uid
LEFT OUTER JOIN
meetings m ON r.mid = m.id
WHERE
u.hidden = 0
GROUP BY
u.id, r.mid
ORDER BY
m.starttime, u.id ASC