Первая таблица данных сотрудников
|ids| name |
+=============+
|1 | Ibrahim |
|2 | Rizky |
|3 | David |
Вторая таблица людей, которые приходят на работу
|id| ids | date |
+========+============+
|1 | 1 | 2018-05-01 |
|2 | 2 | 2018-05-01 |
|3 | 3 | 2018-05-01 |
|4 | 1 | 2018-05-02 |
|5 | 3 | 2018-05-02 |
|6 | 1 | 2018-05-03 |
|6 | 2 | 2018-05-03 |
|7 | 1 | 2018-05-04 |
|8 | 2 | 2018-05-04 |
|9 | 3 | 2018-05-04 |
результат, который я хочу, более или менее
|name | 2018-05-01 | 2018-05-02 | 2018-05-03 | 2018-05-04 |
=========+============+============+==-=========+============+
|Ibrahim | 1 | 1 | 1 | 1 |
|Rizky | 1 | | 1 | 1 |
|David | 1 | 1 | | 1 |
Можете ли вы мне помочь, я хочу отображать такие данные, следующая дата написана, это частичный пример, я хочу, чтобы он был полным месяцем с первого по конец месяца. 1 означает, что человек идет на работу, пустые средства не приходят на работу.
можете ли вы помочь мне в этом, о том, как запросить его соединение и как отображать итерацию по внешнему виду?
Может быть, причудливый способ это сделать, но я бы сделал это так
select
e.name,
if(sum(if(w.date = '2018-05-01',1,0))=0,null,1) as '2018-05-01',
if(sum(if(w.date = '2018-05-02',1,0))=0,null,1) as '2018-05-02',
if(sum(if(w.date = '2018-05-03',1,0))=0,null,1) as '2018-05-03',
if(sum(if(w.date = '2018-05-04',1,0))=0,null,1) as '2018-05-04',
if(sum(if(w.date = '2018-05-05',1,0))=0,null,1) as '2018-05-05',
if(sum(if(w.date = '2018-05-06',1,0))=0,null,1) as '2018-05-06',
if(sum(if(w.date = '2018-05-07',1,0))=0,null,1) as '2018-05-07'
from employee e
left join work w ON e.ids = w.ids
group by e.ids
Я группирую идентификаторы сотрудников и использую сумму (если (чтобы определить, работали ли они в тот день или нет.
Вот динамический метод -
SET @s := (SELECT GROUP_CONCAT(DISTINCT CONCAT('if(sum(if(w.date = "',
date,
'",1,0))=0,null,1) AS '',
date,'''
)
) from work);
SET @s := concat('select e.name, ',@s,' from employee e
left join work w ON e.ids = w.ids
group by e.ids');
PREPARE stmt FROM @s;
EXECUTE stmt;
Дополнительная информация о динамическом методе, доступном здесь.