[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQL IF....
savelikan
Делаю календарь и событися на календарь.
Дело в том, что если месяц, в котром начинается события меньше текущего а месяць окончания больше текущего, тодга день проверять не нужно...
Вот так
$DAY = "`start_d` <= '".$search_D."' AND `end_d` >= '".$search_D."'";
$SQLtema = mysql_query("SELECT * FROM tema WHERE
`start_y` <= '"
.$search_Y."' AND `end_y` >= '".$search_Y."' AND
`start_m` <= '"
.$search_M."' AND `end_m` >= '".$search_M."' AND
"
.$DAY."
"
, $mysql);

Как добавить условие, что ЕСЛИ($end_m>$search_M(текущий)) то $data = ''

Зараннее благодарен smile.gif



Спустя 13 минут, 19 секунд (1.10.2010 - 11:21) waldicom написал(а):
Там нужно два условия, т.е. для else тоже.
Вот тут все описано: http://dev.mysql.com/doc/refman/5.1/en/con...-functions.html
Или это условие нужно проверять в php?

Спустя 1 день, 57 минут, 12 секунд (2.10.2010 - 12:18) savelikan написал(а):
Огромное спасибо за помощь.. НО...
Вчера до ночи ломал голову...

$DAY = "`start_d` <= '".$search_D."' AND `end_d` >= '".$search_D."'";
$SQLtema = mysql_query("SELECT * FROM tema WHERE
`start_y` <= '"
.$search_Y."' AND `end_y` >= '".$search_Y."' AND
`start_m` <= '"
.$search_M."' AND `end_m` >= '".$search_M."'
IF(`start_m` > '"
.$search_M."') ".$DAY.";

"
, $mysql);
$TSTtema = mysql_fetch_array($SQLtema);

и ничего не получаєтся....
Помогите, если не сложно...

Спустя 3 часа, 38 минут, 46 секунд (2.10.2010 - 15:56) Michael написал(а):
Я бы тебе посоветовал так проверять:

$dd = $search_Y*365 + $search_M*31 + $search_D;
$SQLtema = mysql_query("SELECT * FROM tema WHERE
(`start_y`*365 + `start_m`*31 + start_d` <= "
. $dd . ")
AND
(`end_y`*365 + `end_m`*31 + `end_d` >="
. $dd . ")");

т.е. перевести все в дни

Спустя 2 часа, 2 минуты, 1 секунда (2.10.2010 - 17:59) savelikan написал(а):
Не все дни имеют 31 день....
Я просто не могу понять синтаксиса IF...esle... на MySQL... Вы могли бы мне дать пример что ЕСЛИ 'end_y' больше $search_Y то $day не нужно...

Зараннее благодарен smile.gif

Спустя 10 минут, 59 секунд (2.10.2010 - 18:09) Michael написал(а):
Цитата (savelikan @ 2.10.2010 - 16:59)
Не все дни имеют 31 день....

месяц имеет не больше 31 день, год - не больше 365... Так можно днями считать.

IF ELSE в запросах mysql не использовал, могу подсказать только приблизительно:

...
AND IF(end_y > $search_Y, true, $DAY)

Спустя 2 минуты, 47 секунд (2.10.2010 - 18:12) arvitaly написал(а):
А для чего это вообще делать в mysql а не в PHP

Спустя 49 минут, 20 секунд (2.10.2010 - 19:02) Michael написал(а):
Цитата (arvitaly @ 2.10.2010 - 17:12)
А для чего это вообще делать в mysql а не в PHP

вопроса ТС что ли даже не понял?

Спустя 13 минут, 46 секунд (2.10.2010 - 19:15) savelikan написал(а):
Цитата (arvitaly @ 2.10.2010 - 17:12)
А для чего это вообще делать в mysql а не в PHP

Да, в PHP зделать намного проще. НО
Если на PHP проверять каждую строку то будет по 2 запроса на строку и к тому же постаничный вывод будет зделать невозможно...

Спустя 1 час, 42 минуты, 1 секунда (2.10.2010 - 20:57) Michael написал(а):
Я у себя с IF проверил. Все работает как и ожидается.
Накидал примерно что у тебя будет:
$DAY = "`start_d` <= '".$search_D."' AND `end_d` >= '".$search_D."'";
$SQLtema = mysql_query("SELECT * FROM tema WHERE
`start_y` <= '"
.$search_Y."' AND `end_y` >= '".$search_Y."' AND
`start_m` <= '"
.$search_M."' AND `end_m` >= '".$search_M."' AND
IF (( (`start_y` = `end_y`) AND (`start_m` < `end_m`) ), true, "
. $DAY. ")";


p.s. столбцы, я так понимаю - численные, тогда следующие кавычки:
`end_y` >= '".$search_Y."'
не нужны.

Спустя 15 часов, 35 минут, 38 секунд (3.10.2010 - 12:33) savelikan написал(а):
+1
Огромное спасибо.
Кстати, я заменит, что SQL не может сравнить двохцыфровое число з одноцыфровым, например 14 и 3... Ну приходится делать функцию, чтоб делала 03 и тогда проверит. Ето не важно, но что вы думаете по етому поводу?

Спустя 1 час, 3 минуты, 34 секунды (3.10.2010 - 13:37) waldicom написал(а):
Цитата (savelikan @ 3.10.2010 - 11:33)
+1
Огромное спасибо.
Кстати, я заменит, что SQL не может сравнить двохцыфровое число з одноцыфровым, например 14 и 3... Ну приходится делать функцию, чтоб делала 03 и тогда проверит. Ето не важно, но что вы думаете по етому поводу?

Наверное эти числа хранятся в текстовом поле?

Спустя 1 минута, 11 секунд (3.10.2010 - 13:38) Michael написал(а):
Просто числовые данные надо хранить в столбцах числового типа, а не строкового.
Пример:
SELECT 3 < 14

результат: 1 - истина
SELECT '3' < '14'

результат: 0 - ложь

Решить можно приведением:
SELECT CAST('3' AS UNSIGNED) < CAST('14' AS UNSIGNED)

результат: 1 - истина
только у тебя в CAST будут поля приводиться. Лучше конечно ALTER-ом правильный тип полям задать.

Спустя 4 минуты, 16 секунд (3.10.2010 - 13:42) waldicom написал(а):
Цитата (Michael @ 3.10.2010 - 12:38)

Решить можно приведением:
SELECT CAST('3' AS UNSIGNED) < CAST('14' AS UNSIGNED)

результат: 1 - истина
только у тебя в CAST будут поля приводиться. Лучше конечно ALTER-ом правильный тип полям задать.

Такое не всегда возможно. Представь себе самый простой пример: в строковом поле хранятся размеры вещи. Они могут быть такими: 34, 34,5, 34.5, XL

Спустя 2 минуты, 42 секунды (3.10.2010 - 13:45) Michael написал(а):
это да, но у него вроде числа - год, месяц, день.

Спустя 10 часов, 11 минут, 16 секунд (3.10.2010 - 23:56) savelikan написал(а):
Огомное спасибо! Хотел поставить еще +.. но нет возможности...
Я просто учу PHP и MySQL сам... Какую функцию нужно, такую и использую... Не работает, значить неправильно...


_____________
Одесса - мой город!)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.