The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"select в MySQL"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"select в MySQL"  
Сообщение от Fagot email on 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 ?

Пасиба!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

  • select в MySQL, ACCA, 18:38 , 21-Авг-06, (1)  
    • select в MySQL, Fagot, 19:54 , 21-Авг-06, (2)  
      • select в MySQL, ACCA, 00:15 , 22-Авг-06, (3)  
      • select в MySQL, gruy, 16:46 , 31-Авг-06, (4)  
      • select в MySQL, Wulf, 17:41 , 31-Авг-06, (5)  
        • select в MySQL, Wulf, 18:26 , 31-Авг-06, (6)  

Сообщения по теме [Сортировка по времени, UBB]


1. "select в MySQL"  
Сообщение от ACCA (ok) on 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.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "select в MySQL"  
Сообщение от Fagot email on 21-Авг-06, 19:54 
Благодарствую, чё-то сам недодумался! Всё элементарно и работает!!!

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру