Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Две таблицы: сотрудник, история посещений, связь один ко многим. Надо сделать два отчета, присутствие (имя сотрудника, время прихода, время ухода), отсутствие (имя сотрудника) сотрудников за определенный день По присутствию делаю так: SELECT employees.name, history.startJob, history.endJob FROM history INNER JOIN employees ON history.employee_id = employees.id GROUP BY history.employee_id, DAY(history.startJob) но не знаю как выбрать за определенный день. В sql совсем недавно, камнями не кидать, спасибо! И еще в дагонку вопрос, как сделать апдейт таблицы история(endJob) по айди сотрудника. Логика следующая, человек пришел, я делаю инсерт в историю - вписываю employee_id, и текущее время в startJob, endJob не трогаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2017, 14:27 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Sunseer, Это тебе по работе надо или учебный пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2017, 23:50 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
MikkiMouse, учебный пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 16:58 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Ну так делай. Показывай, что у тебя получается, объясняй, почему сделано именно так. Если ошибёшься - или поправим, или направим. А пока ты ничего не делаешь - нафига что-то делать нам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 19:16 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Akina, В принципе, вы правы. По присутствию за период: SELECT * from employees e INNER JOIN history h ON e.id = h.employee_id WHERE h.startJob >= ? AND h.endJob <= ? Апдейт по окончанию работы: UPDATE history SET endJob=? WHERE employee_id=? AND endJob IS NULL Но вот как сделать по отсутствию сотрудника за период? LEFT JOIN'ом соединяю две таблицы, отсутствующей будет с NULL, но если ставлю условие по периода, эта строка не попадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 01:38 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Если под "присутствием за период" понимается полная вложенность, то запрос верный, а если и частичная - то нет. Поиск пересекающихся периодов обсуждается регулярно, поиск по форуму поможет. Тот же подход используйте и при поиске отсутствия - LEFT JOIN по условию пересечения и отбор по history.id IS NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 09:22 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
авторесли ставлю условие по периода, эта строка не попадает.Вероятно, пишете условие отбора во WHERE? А оно должно быть в ON. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 09:24 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Akina, SELECT * FROM employees e LEFT JOIN (SELECT employee_id from history h2 WHERE h2.startjob >= '2017-02-15' AND h2.endjob < '2017-02-20') ON e.id = h2.employee_id WHERE e.id is NULL что не так по синтаксису? По отсутствующим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 10:59 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Да всё... должно быть типа Код: sql 1. 2. 3. 4. 5. 6. 7. То есть СНАЧАЛА отбираем по времени, и только оставшееся используем для связывания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 11:29 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Akina, SELECT * FROM employees e WHERE NOT EXISTS(SELECT employee_id FROM history h where e.id=h.employee_id AND h.startJob >= '2017-02-19' AND h.endJob < '2017-02-20') а так можно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 12:20 |
|
||
|
Select'ы по связанным таблицам
|
|||
|---|---|---|---|
|
#18+
Да можно... почему нет-то... только в подзапросе лучше не SELECT employee_id, а тупо Код: sql 1. - EXIST-у пофиг, какое именно значение, он проверяет только факт его наличия. PS. И пользуйтесь тегом SRC... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 12:37 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39408890&tid=1830896]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 367ms |

| 0 / 0 |
