Дело в том, что если месяц, в котром начинается события меньше текущего а месяць окончания больше текущего, тодга день проверять не нужно...
Вот так
$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 = ''
Зараннее благодарен

Спустя 13 минут, 19 секунд (1.10.2010 - 11:21) waldicom написал(а):
Там нужно два условия, т.е. для else тоже.
Вот тут все описано: http://dev.mysql.com/doc/refman/5.1/en/con...-functions.html
Или это условие нужно проверять в php?
Вот тут все описано: 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 не нужно...
Зараннее благодарен
Я просто не могу понять синтаксиса IF...esle... на MySQL... Вы могли бы мне дать пример что ЕСЛИ 'end_y' больше $search_Y то $day не нужно...
Зараннее благодарен

Спустя 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 проверил. Все работает как и ожидается.
Накидал примерно что у тебя будет:
p.s. столбцы, я так понимаю - численные, тогда следующие кавычки:
`end_y` >= '".$search_Y."'
не нужны.
Накидал примерно что у тебя будет:
$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 и тогда проверит. Ето не важно, но что вы думаете по етому поводу?
Огромное спасибо.
Кстати, я заменит, что 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 написал(а):
Просто числовые данные надо хранить в столбцах числового типа, а не строкового.
Пример:
результат: 1 - истина
результат: 0 - ложь
Решить можно приведением:
результат: 1 - истина
только у тебя в CAST будут поля приводиться. Лучше конечно ALTER-ом правильный тип полям задать.
Пример:
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 сам... Какую функцию нужно, такую и использую... Не работает, значить неправильно...
Я просто учу PHP и MySQL сам... Какую функцию нужно, такую и использую... Не работает, значить неправильно...
_____________
Одесса - мой город!)))