Доброго времени суток!
У меня такая небольшая проблемка:
Есть две таблички1: Users
login password tariff balans
user1 pass1 pro 1002: Tariffs
name hour cost
pro 0 0.3
pro 9 0.5
pro 13 1
pro 23 0.3Задача такая: надо из поля Users.balans вычесть число*Tariffs.cost
для этого надо выбрать значение: WHERE Users.tariff=Tariffs.name AND Tariffs.hour<=HOUR(CURTIME()) (но его надо выбрать одно, т.е. наибольшее из результата).Реально ли выполнить одним запросом (т.е. запихнуть всё это в один UPDATE)?
Как эту задачу можно реализовать например в PgSQL ?Пасиба!
>Задача такая: надо из поля Users.balans вычесть число*Tariffs.cost
>для этого надо выбрать значение: WHERE Users.tariff=Tariffs.name AND Tariffs.hour<=HOUR(CURTIME()) (но его надо
>выбрать одно, т.е. наибольшее из результата).упрости задачу, измени Tariffs( char name(16), int start_hour, int end_hour, double cost);
Тогда не нужен будет вложенный select, чтобы найти max hour.
Благодарствую, чё-то сам недодумался! Всё элементарно и работает!!!А можно-ли одним запросом сделать такое:
Если запись в таблице существует то внести в неё изменение.
Если запись отсутствует то создать новую.Сейчас у меня делается скриптом SELECT.
Если резальтат не NULL тогда INSERT
Иначе UPDATE?
>А можно-ли одним запросом сделать такое:
>Если запись в таблице существует то внести в неё изменение.
>Если запись отсутствует то создать новую.Стандартных способов нету, есть нестандартный http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-upd.../
Я бы не связывался - через полгода сам забудешь, а обезьяна, которая придёт на твоё место через три-четыре года, вообще караул чего наделает. Сделай как можно проще.
>А можно-ли одним запросом сделать такое:
>Если запись в таблице существует то внести в неё изменение.
>Если запись отсутствует то создать новую.Смотри
INSERT ... ON DUPLICATE KEY UPDATE ...
>А можно-ли одним запросом сделать такое:
>Если запись в таблице существует то внести в неё изменение.
>Если запись отсутствует то создать новую.
>
>Сейчас у меня делается скриптом SELECT.
>Если резальтат не NULL тогда INSERT
>Иначе UPDATE?Самый одновременно простой и универсальный способ:
1. Сначала сделать UPDATE.
2. Получить число изменившихся столбцов и если оно равно 0, то сделать INSERT.
>2. Получить число изменившихся столбцов.
Очепятка. Число изменившихся строк, конечно.