URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5654
[ Назад ]

Исходное сообщение
"select в MySQL"

Отправлено Fagot , 21-Авг-06 11:30 
Доброго времени суток!
У меня такая небольшая проблемка:
Есть две таблички

1: Users
login  password  tariff  balans
user1  pass1     pro     100

2: 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 ?

Пасиба!


Содержание

Сообщения в этом обсуждении
"select в MySQL"
Отправлено ACCA , 21-Авг-06 18:38 
>Задача такая: надо из поля 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 в MySQL"
Отправлено Fagot , 21-Авг-06 19:54 
Благодарствую, чё-то сам недодумался! Всё элементарно и работает!!!

А можно-ли одним запросом сделать такое:
Если запись в таблице существует то внести в неё изменение.
Если запись отсутствует то создать новую.

Сейчас у меня делается скриптом SELECT.
Если резальтат не NULL тогда INSERT
Иначе UPDATE?


"select в MySQL"
Отправлено ACCA , 22-Авг-06 00:15 
>А можно-ли одним запросом сделать такое:
>Если запись в таблице существует то внести в неё изменение.
>Если запись отсутствует то создать новую.

Стандартных способов нету, есть нестандартный http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-upd.../

Я бы не связывался - через полгода сам забудешь, а обезьяна, которая придёт на твоё место через три-четыре года, вообще караул чего наделает. Сделай как можно проще.


"select в MySQL"
Отправлено gruy , 31-Авг-06 16:46 
>А можно-ли одним запросом сделать такое:
>Если запись в таблице существует то внести в неё изменение.
>Если запись отсутствует то создать новую.

Смотри
INSERT ... ON DUPLICATE KEY UPDATE ...


"select в MySQL"
Отправлено Wulf , 31-Авг-06 17:41 
>А можно-ли одним запросом сделать такое:
>Если запись в таблице существует то внести в неё изменение.
>Если запись отсутствует то создать новую.
>
>Сейчас у меня делается скриптом SELECT.
>Если резальтат не NULL тогда INSERT
>Иначе UPDATE?

Самый одновременно простой и универсальный способ:
1. Сначала сделать UPDATE.
2. Получить число изменившихся столбцов и если оно равно 0, то сделать INSERT.


"select в MySQL"
Отправлено Wulf , 31-Авг-06 18:26 
>2. Получить число изменившихся столбцов.
Очепятка. Число изменившихся строк, конечно.