Вот моя проблема:
со следующим запросом я получаю этот результат:
SELECT e.employes_id AS user_id, IFNULL(e.employes_initiales, 'Divers') AS initials, s.lieu, s.debut, s.fin, IFNULL(s.couleur, '#000000') AS color , s.id AS p_id,
CASE when couleur = '#00FF00' then 1 else 0 END as callservice
FROM ap_employes e LEFT JOIN
(ap_planing_employes sl JOIN
ap_planing s
ON sl.id_planing = s.id AND s.effacee = 0 AND
DATE('2018-04-27') BETWEEN CAST(s.debut AS DATE) AND CAST(s.fin AS DATE))
ON employes_id = sl.id_employes
WHERE e.employes_effacee = 0
ORDER BY e.employes_id ASC, FIELD(s.couleur,'#00FF00') desc, s.debut ASC, s.lieu ASC
Результат
user_id initials lieu debut fin color p_id callservice
------- -------- ---------------------------------------- ------------------- ------------------- ------- ------ -------------
1 DV Test 2018-04-27 07:30:00 2018-04-27 07:30:00 #000000 526 0
1 DV Another Test 2018-04-27 09:00:00 2018-04-27 09:00:00 #000000 504 0
1 DV Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
2 SA Call service 2018-04-27 00:00:00 2018-04-28 00:00:00 #00FF00 336 1
2 SA Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
3 SW Customer x 2018-04-27 00:00:00 2018-04-27 00:00:00 #000000 547 0
3 SW Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
3 SW End at 2pm 2018-04-27 14:00:00 2018-04-27 14:00:00 #FF0000 538 0
4 JE Test2 2018-04-27 10:00:00 2018-04-27 10:00:00 #000000 541 0
4 JE Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
5 FR Holydays 2018-04-11 00:00:00 2018-04-29 00:00:00 #FF0000 75 0
5 FR Holydays 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
8 IE Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
999 Divers (NULL) (NULL) (NULL) #000000 (NULL) 0
Хорошо, пока все идеально
Как видите, в строке 4 последний столбец «callservice» равен 1, потому что цвет в этой строке правильный в соответствии с моим запросом.
Теперь моя проблема. Я бы хотел, чтобы, когда ни у кого нет цвета, соответствующего службе звонков, он автоматически присваивается идентификатору пользователя 3
Если какой-либо пользователь с цветом, соответствующим службе вызова, то он будет иметь коллон "callservice" на 1. В противном случае по умолчанию это должен быть идентификатор пользователя 3. ...
Я понял, как работает функция СЛУЧАЙ КОГДА, но не могу применить ее на нескольких строках ...
Как сделать?
Если мой вопрос не совсем ясен, я могу попробовать улучшить
Вот пример результата, который я хочу получить. Как видите, ни у кого нет цвета, соответствующего callservice, поэтому callservice присваивается ID пользователя 3.
user_id initials lieu debut fin color p_id callservice
------- -------- ---------------------------------------- ------------------- ------------------- ------- ------ -------------
1 DV Test 2018-04-27 07:30:00 2018-04-27 07:30:00 #000000 526 0
1 DV Another Test 2018-04-27 09:00:00 2018-04-27 09:00:00 #000000 504 0
1 DV Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
2 SA Customer y 2018-04-27 00:00:00 2018-04-28 00:00:00 #000000 336 0
2 SA Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
3 SW Customer x 2018-04-27 00:00:00 2018-04-27 00:00:00 #000000 547 1
3 SW Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 1
3 SW End at 2pm 2018-04-27 14:00:00 2018-04-27 14:00:00 #FF0000 538 1
4 JE Test2 2018-04-27 10:00:00 2018-04-27 10:00:00 #000000 541 0
4 JE Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
5 FR Holydays 2018-04-11 00:00:00 2018-04-29 00:00:00 #FF0000 75 0
5 FR Holydays 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
8 IE Something 2018-04-27 12:00:00 2018-04-27 12:00:00 #0000FF 451 0
999 Divers (NULL) (NULL) (NULL) #000000 (NULL) 0






Что ж, это может быть сложное решение, но ...
SET @couleur_number = 0;
DROP TEMPORARY TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table ENGINE=MEMORY AS
SELECT e.employes_id AS user_id, IFNULL(e.employes_initiales, 'Divers') AS initials,
s.lieu, s.debut, s.fin, IFNULL(s.couleur, '#000000') AS color , s.id AS p_id,
CASE when couleur = '#00FF00' then @couleur_number := @couleur_number + 1
FROM ap_employes e LEFT JOIN
(ap_planing_employes sl JOIN
ap_planing s
ON sl.id_planing = s.id AND s.effacee = 0 AND
DATE('2018-04-27') BETWEEN CAST(s.debut AS DATE) AND CAST(s.fin AS DATE))
ON employes_id = sl.id_employes
WHERE e.employes_effacee = 0
ORDER BY e.employes_id ASC, FIELD(s.couleur,'#00FF00') desc, s.debut ASC, s.lieu ASC;
SELECT user_id, initials,
s.lieu, s.debut, s.fin, color, p_id
CASE when @couleur_number > 0
then
CASE when color='#00FF00'
then 1 else 0
end
else
CASE when user_id='3'
then 1 else 0
end
END as callservice
FROM temp_table;
сложнее, чем я думал, но вроде работает, так что .. спасибо :-)