Mysql group_concat с функцией in () - PullRequest
       2

Mysql group_concat с функцией in ()

0 голосов
/ 17 октября 2018

Я пытаюсь использовать групповой конкатат с функцией in в mysql, это не дает мне никакой синтаксической ошибки, но я не уверен, что она работает.

Я пытаюсь сделатьчто-то вроде этого:

select
     case
         when weekday(ps.date) in (group_concat(vd.valid_days)) then ps.date
         when weekday(ps.date+1) in (group_concat(vd.valid_days)) then DATE_ADD(ps.date, INTERVAL 1 DAY)
         when weekday(ps.date+2) in (group_concat(vd.valid_days)) then DATE_ADD(ps.date, INTERVAL 2 DAY)
         when weekday(ps.date+3) in (group_concat(vd.valid_days)) then DATE_ADD(ps.date, INTERVAL 3 DAY)
         when weekday(ps.date+4) in (group_concat(vd.valid_days)) then DATE_ADD(ps.date, INTERVAL 4 DAY)
         when weekday(ps.date+5) in (group_concat(vd.valid_days)) then DATE_ADD(ps.date, INTERVAL 5 DAY)
     end as valid_date
from
    purchase_shopping  ps
    left join
    purchase_region pr on pr.id = ps.idfk_region
    left join
    valid_weeks_days vd on vd.idfk_region = pr.id
group by ps.id

Что мне нужно в основном, это вернуть действительную дату, если определенный день находится в конкатате группы из левого соединения.Я не знаю, неверна ли моя логика или она не работает.Obs: функция concat группы возвращает что-то вроде этого: (1,2,5), поэтому она должна работать с функцией in ().

Пример с переработанными данными кода:

ps.date = 2018-10-17
weekday(ps.date) = 2 
group_concat(vd.valid_days) = (1,4)
then valid_date will be 2018-10-19

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы не можете использовать результат group_concat в том же запросе, поэтому вы должны использовать подзапрос

select
     case
         when weekday(date) in valid_days then date
         when weekday(date+1) in valid_days then DATE_ADD(date, INTERVAL 1 DAY)
         when weekday(date+2) in valid_days then DATE_ADD(date, INTERVAL 2 DAY)
         when weekday(date+3) in valid_days then DATE_ADD(date, INTERVAL 3 DAY)
         when weekday(date+4) in valid_days then DATE_ADD(date, INTERVAL 4 DAY)
         when weekday(date+5) in valid_days then DATE_ADD(date, INTERVAL 5 DAY)
     end as valid_date
     from (
     select ps.date, (group_concat(vd.valid_days)) as valid_days
from
    purchase_shopping  ps
    left join
    purchase_region pr on pr.id = ps.idfk_region
    left join
    valid_weeks_days vd on vd.idfk_region = pr.id
group by ps.id
) as sub_query
0 голосов
/ 17 октября 2018

Возможно, вы просто хотите:

select (case when uc.id is not null then 'It has items' end)
from shopping_cart sc left join
     user_cart uc
     on uc.id = sc.idfk_cart;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...