Вложенная логика выписки - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над запросом, чтобы сгладить некоторые данные wp_postsmeta в базе данных WordPress, и мне нужно установить конкретное значение для различных значений meta_value. У меня есть ключ категории и различные значения категории, для каждого значения я хочу установить столбец с именем color и именем color для нашей палитры бренда

    select post_title as title, 
 MAX(CASE WHEN meta_key='corporate_calendar_category' THEN meta_value END) as 'category',
 MAX(CASE WHEN meta_key = 'corporate_calendar_subcategory' THEN meta_value END) as 'subcategory',

 // Do I need to include a nested CASE WHEN?
 MAX(CASE WHEN meta_key = 'corporate_calendar_subcategory' and meta_value = 'Marketing' THEN 'blueLagoon' END) as 'color',

 MAX(CASE WHEN meta_key = 'corporate_calendar_presenter' THEN meta_value END) as 'presenter',
 MAX(CASE WHEN meta_key = 'corporate_calendar_date' THEN meta_value END) as 'start_date',
 MAX(CASE WHEN meta_key = 'corporate_calendar_time' THEN meta_value END) as 'start_time',
 MAX(CASE WHEN meta_key = 'corporate_calendar_duration' THEN meta_value END) as 'duration',
 MAX(CASE WHEN meta_key = 'corporate_calendar_registration_link' THEN meta_value END) as 'registration_link',
 MAX(CASE WHEN meta_key = 'corporate_calendar_description' THEN meta_value END) as 'description',
 MAX(CASE WHEN meta_key = 'corporate_calendar_image_path' THEN meta_value END) as 'image_path'

FROM   wp_posts p 
JOIN wp_postmeta m ON p.id = m.post_id
where p.post_type = 'calendar-event'
and p.post_status = 'publish'
GROUP BY p.id

corporate_calendar_subcategory имеет много значений, Marketing, HR, Company Holiday и т. Д., И для каждой подкатегории я хочу, чтобы каждая строка имела определенный цвет.

title     category   subcategory       color        presenter   start_date etc.
Example   Training   Marketing         blueLagoon   someone     08/29/2018
Labor Day Reminder   Company Holiday   camelot                  09/03/2018
etc
etc

Является ли наилучшим способом достижения этого использование вложенного CASE WHEN против meta_value? Или есть лучший способ?

Я также попытался включить оператор if (ниже), но он дублировал каждую строку.

if(meta_key = 'corporate_calendar_subcategory', 
 CASE
   WHEN meta_value = 'Marketing' THEn 'blueLagoon'
   WHEN meta_value = 'Company Holiday' THEN 'camelot'
 END,
 '') as color,

1 Ответ

0 голосов
/ 28 августа 2018

Да, вложенный оператор CASE будет правильным решением, если вы заранее знаете все категории и цвета. Если цвета категорий находятся в другой таблице, вы можете вместо этого сделать выборку или JOIN.

Вот пример с вложенным регистром:

max(case when meta_key = 'corporate_calendar_subcategory' then
    case meta_value
        when 'Marketing' then 'blue'
        when 'Sales' then 'yellow
        when 'Development' then 'red'
    end
end)
...