powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сравнение в CASE
17 сообщений из 17, страница 1 из 1
сравнение в CASE
    #38417235
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пытаюсь использовать в CASE операторы сравнения
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
SELECT
r.post_title,
r.ID,
r.post_date,
date(cp_date_deadline.meta_value) as 'cp_date_deadline',
cp_date_end.meta_value AS "cp_date_end",
client.post_title AS client_name,
prioritet.meta_value AS prioritet,
term_cc.name AS term_cc,
responsible_fio.post_title as "responsible_fio",
result_term.name as "result_term",
IF (cp_date_end.meta_value>0, "Закрыто", "Открыто") AS "open",
/*TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)) as 'now',*/
CASE TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value))
WHEN 0 THEN 'Сегодня'
WHEN 1 THEN 'Вчера'
WHEN 2 THEN 'Позавчера'
WHEN ((TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>7) THEN 'На прошлой неделе'
WHEN -1 THEN 'Завтра'
WHEN -2 THEN 'Послезавтра'
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>-2 AND (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<-7 THEN 'На прошлой неделе'
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>2 AND (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<7 THEN 'На этой неделе'
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<(-7) THEN 'Просроченные'
END AS 'now',
photoreport.meta_value as 'photoreport',
"|||" AS "|||",
filter_term.term_taxonomy_id,
r.*
 
FROM
`cp_posts`AS r

/*фильтруем дела по сделкам*/
RIGHT JOIN (
SELECT tr.term_taxonomy_id, tr.object_id, trm.name FROM `cp_term_relationships`tr
LEFT JOIN cp_term_taxonomy as tax ON (tax.term_taxonomy_id = tr.term_taxonomy_id)
RIGHT JOIN cp_terms trm ON (trm.term_id = tax.term_id and tax.term_id in (73))
WHERE tr.term_taxonomy_id IS NOT NULL
  ) as filter_term ON filter_term.object_id = r.ID
 
/*подключаем названия терминов категории дел*/
LEFT JOIN cp_term_taxonomy AS tax_cc ON tax_cc.term_taxonomy_id = filter_term.term_taxonomy_id
LEFT JOIN cp_terms AS term_cc ON term_cc.term_id = tax_cc.term_id
 
/*подключаем поле "Дата закрытия", типа метаполя, значение в cp_date_end.meta_value*/
LEFT JOIN cp_postmeta AS cp_date_end ON (cp_date_end.post_id = r.ID AND cp_date_end.meta_key = 'cp_date_end')

/*Подключаем поле "Срок", типа метаполя, значение в cp_date_deadline.meta_value*/
LEFT JOIN cp_postmeta AS cp_date_deadline ON (cp_date_deadline.post_id = r.ID AND cp_date_deadline.meta_key = 'cp_date_deadline')

 
/*подключаем поле "Приоритет", типа метаполя, значение в prioritet.meta_value*/
LEFT JOIN cp_postmeta AS prioritet ON (prioritet.post_id = r.ID AND prioritet.meta_key = 'prioritet')

/*подключаем поле "Фотоотчет", типа метаполя, значение в photoreport.meta_value*/
LEFT JOIN cp_postmeta AS photoreport ON (photoreport.post_id = r.ID AND photoreport.meta_key = 'photoreport')
 
/*подключаем поле "Клиент", типа Пост ИД, значение в client.post_title*/
LEFT JOIN cp_postmeta AS client_id ON (client_id.post_id = r.ID AND client_id.meta_key = 'organization')
 
/* подключаем поле "Ответственный" */
LEFT JOIN cp_postmeta AS responsible_id ON (responsible_id.post_id = r.ID AND responsible_id.meta_key = 'responsible-cp-posts-sql')
LEFT JOIN cp_posts AS responsible_fio ON (responsible_fio.ID = responsible_id.meta_value)

/*фильтруем дела по результату*/
LEFT JOIN (SELECT * FROM `cp_term_relationships` WHERE `term_taxonomy_id` IN (16, 17, 59)) AS filter_result_term ON filter_result_term.object_id = r.ID
 
/* подключаем поле "Результат" */
LEFT JOIN cp_term_taxonomy AS result_tax ON result_tax.term_taxonomy_id = filter_result_term.term_taxonomy_id
LEFT JOIN cp_terms AS result_term ON result_term.term_id = result_tax.term_id   

/*значение содержится в сериализованном виде, поэтому применяем REGEXP*/
LEFT JOIN cp_posts AS client ON (client_id.meta_value REGEXP CONCAT('\"', client.ID, '\"'))
 
WHERE
r.post_type = 'cases' AND
r.post_status = 'publish'


на строчках со сравнением типа этой
Код: sql
1.
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>-2 AND (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<-7 THEN 'На прошлой неделе'


выводит Null хотя я уверен что есть данные удовлетворяющие условию, не могу понять в чем дело
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417262
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не очень понимаю термин "фильтруем" применительно к LEFT JOIN.

Кстати, раз уж вы в секции WHERE накладываете условие на таблицу `cp_posts`AS r, то RIGHT JOIN лучше заменить на просто JOIN.
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417270
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Касательно CASE-а - добавьте ветку ELSE

Для контроля сложных выражений добавьте их прямо в SELECT, будет видно их значение
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417277
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема именно в этом куске
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CASE TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value))
WHEN 0 THEN 'Сегодня'
WHEN 1 THEN 'Вчера'
WHEN 2 THEN 'Позавчера'
WHEN ((TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>7) THEN 'На прошлой неделе'
WHEN -1 THEN 'Завтра'
WHEN -2 THEN 'Послезавтра'
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>-2 AND (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<-7 THEN 'На прошлой неделе'
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>2 AND (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<7 THEN 'На этой неделе'
WHEN (TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))<(-7) THEN 'Просроченные'
END AS 'now',


значение вот этого выражения
Код: sql
1.
TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value))


конечно же проверял, тестовые данные сам заносил, поэтому и уверен что не должно быть Null
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417283
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. в тестовых данных есть значения 14,6,-3,2,1,0,-1,-2,-8
соответственно Сегодня, Вчера, Завтра,Позавчера, Послезавтра выводятся, а остальные типа этого
Код: sql
1.
WHEN ((TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>7) THEN 'На прошлой неделе'


выводится null
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417289
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redmonkey
Код: sql
1.
WHEN ((TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>7) THEN 'На прошлой неделе'



выводится nullВот и выведите в селекте выражение ((TO_DAYS(CURDATE())-TO_DAYS(date(cp_date_deadline.meta_value)))>7)
Посмотрим, чем оно равно.
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417306
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
оно равно либо 0 либо 1 либо Null
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417308
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redmonkey,
в той строке где >7 как раз 1
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417313
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в остальных аналогично 1 в нужных строках
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417363
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redmonkeyredmonkey,
в той строке где >7 как раз 1Покажите вывод такой строки, где это выражение равно 1 и, одновременно, CASE дает неправильный результат.

И таки допишите ветку ELSE с каким-нибудь контрольным значением.
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417374
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417376
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redmonkey,

"Картинка с другого сайта" явно не удалась. Приложите картинку прямо тут, к своему сообщению.
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417380
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

крайняя левая колонка cp_date_deadline, те что подчеркнуты это сообветственно выражения из case, крайняя правая это то что возвращает case
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417411
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует два варианта CASE. Но их нельзя перемешивать. Или только первый вариант
Код: sql
1.
2.
3.
4.
5.
CASE Выражение
WHEN СкалярноеЗначение THEN Значение
...
ELSE Значение
END

или только второй
CASE
WHEN БулевоВыражение THEN Значение
...
ELSE Значение
END[/SRC]
Вы пытаетесь их перемешать. "Низзя!"
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417441
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВы пытаетесь их перемешать. "Низзя!"О, точно! а я прозевал :(
...
Рейтинг: 0 / 0
сравнение в CASE
    #38417454
redmonkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

спасибо, помогло!
...
Рейтинг: 0 / 0
сравнение в CASE
    #38418797
Krava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно разные ситуации бывают, но почему бы это все не реализовать на javascript?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сравнение в CASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]