Люди! Подскажите! now() + interval "FieldName" не работает..

Screjet

Новичок
2chira

В договоре написано 3 месяца, это не обозначает 90 дней..
"что написано пером.." (с)
 

ForJest

- свежая кровь
2Screjet

Заглядываем в ман:
DATE_ADD(date,INTERVAL expr type)
т.е. конструкция типа
PHP:
SELECT DATE_ADD(NOW(), INTERVAL '1 DAY')
не удовлетворяет синтаксису вызова функции.
Идем дальше. Пишем
PHP:
SELECT DATE_ADD(NOW(), INTERVAL 1 'DAY')
Как и ожидалось, мускул это не хавает. Потому что ожидает не строковую константу или выражение, а type.
Таким образом, максимум чего ты сможешь добится будет
PHP:
SELECT DATE_ADD(NOW(), INTERVAL field DAY) FROM table1
Так что не парь себе мозги. Придется тебе предварительно извлечь запись в PHP, после чего подставить при формировании запроса.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Screjet, ты всё же обдумай мой совет. А то здесь тебе с радостью объяснят как делать это стоя в гамаке на лыжах, но не скажут, что привычный гамак можно заменить более удобной кроватью. ;)
 

Screjet

Новичок
Sad Spirit
Совет неплохой, но не очень рентабельный.
Переход на новую СУБД - довольно болезненный процесс.. Отпадает..
Но подскажи на будущее, какие есть еще СУБД по параметру цена/качество не уступающие мусклу?
 

chira

Новичок
Ну интересно мне было это сделать средствами MySQL.
И что бы не переходить на другую СУБД:

Код:
create table intemp(intrvl int, what char(1));
insert into intemp values (1,'D'),(1,'M'),(1,'Y');

select case what
when 'D' then date_add(now(),interval intrvl DAY)
when 'M' then date_add(now(),interval intrvl MONTH)
when 'Y' then date_add(now(),interval intrvl YEAR)
end
from intemp;
по моему не очень страшно.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Screjet
Но подскажи на будущее, какие есть еще СУБД по параметру цена/качество не уступающие мусклу?
"По параметру цена/качество" --- то бишь бесплатные? Да и PostgreSQL, и Firebird "стоят" столько же, а по функциональности богаче значительно. Про "производительность" не буду, т.к. независимых бенчмарков не видел.
 

bober

Guest
Автор оригинала: Sad Spirit
Элементарно определяю: я использую строку содержащую слова 'month', 'day' или 'week'. :)

Код:
tst=# create table bar (itest interval);
CREATE TABLE
tst=# insert into bar values ('1 month');
INSERT 33390 1
tst=# insert into bar values ('30 days');
INSERT 33391 1
tst=# select '2003-02-01'::date + itest from bar;
      ?column?
---------------------
 2003-03-01 00:00:00
 2003-03-03 00:00:00
(2 rows)
У меня похожая проблема не могу ее решить

Код:
$ord=mysql_query ("INSERT INTO orderes (cli_id, username, id_plan, plan, preis, mon, pay, data_ord, data_end_ord)
          VALUES 
('$uc[cli_id] ', '$uc[username] ', '$id_plan ', '$plan ', '$cena ', '$ends ', '$oplata ', NOW())', 'DATE_ADD ( NOW(),  INTERVAL 1 MONTH)' ");
Но хотелось бы чтобы было так INTERVAL $ends MONTH
переменная $ends содержит количество месяцев. Как ето проще реализовать
 
Сверху