Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сравнение в CASE / 17 сообщений из 17, страница 1 из 1
04.10.2013, 17:26:04
    #38417235
redmonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
пытаюсь использовать в 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
04.10.2013, 17:40:52
    #38417262
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
Что-то я не очень понимаю термин "фильтруем" применительно к LEFT JOIN.

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

Для контроля сложных выражений добавьте их прямо в SELECT, будет видно их значение
...
Рейтинг: 0 / 0
04.10.2013, 17:46:46
    #38417277
redmonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
проблема именно в этом куске
Код: 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
04.10.2013, 17:49:17
    #38417283
redmonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
т.е. в тестовых данных есть значения 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
04.10.2013, 17:52:35
    #38417289
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
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
04.10.2013, 18:06:29
    #38417306
redmonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
miksoft,
оно равно либо 0 либо 1 либо Null
...
Рейтинг: 0 / 0
04.10.2013, 18:11:26
    #38417308
redmonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
redmonkey,
в той строке где >7 как раз 1
...
Рейтинг: 0 / 0
04.10.2013, 18:17:25
    #38417313
redmonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
в остальных аналогично 1 в нужных строках
...
Рейтинг: 0 / 0
04.10.2013, 19:21:23
    #38417363
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение в CASE
redmonkeyredmonkey,
в той строке где >7 как раз 1Покажите вывод такой строки, где это выражение равно 1 и, одновременно, CASE дает неправильный результат.

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

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

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

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

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


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