Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объединить два запроса в один
 
 автор: ntro123   (21.05.2011 в 10:50)   письмо автору
 
 

Как можно объединить 2 запроса.

1 запрос удаляет все из таблицы
2 запрос записывает туда значения

(DELETE FROM cookie_g) UNION (INSERT INTO cookie_g (cook) VALUES ('odin'))

я знаю что UNION работает только для объединения SELECT но а можно какую нибудь альтернативу?

  Ответить  
 
 автор: cheops   (21.05.2011 в 11:07)   письмо автору
 
   для: ntro123   (21.05.2011 в 10:50)
 

Нет, так не получится... А почему хотите одни запросом сделать? Вроде выгода не очень большая? Или просто операция частая? Можно оформить эти операторы в виде хранимой процедуры - тогда её можно будет выполнять одним запросом.

  Ответить  
 
 автор: ntro123   (21.05.2011 в 11:25)   письмо автору
 
   для: cheops   (21.05.2011 в 11:07)
 

Нет, про100 интересно.

А вот реально что нужно будет сделать 1 запрос, т.к. операция будет очень частой это вот такой запрос

"(SELECT maketime FROM time) UNION (UPDATE time SET maketime='".time()+1."')"

  Ответить  
 
 автор: cheops   (21.05.2011 в 11:39)   письмо автору
 
   для: ntro123   (21.05.2011 в 11:25)
 

Это проще сделать в рамках одного UPDATE-запроса (если я правильно понял задумку)
UPDATE `time`
SET maketime = maketime + 1

  Ответить  
 
 автор: ntro123   (21.05.2011 в 11:46)   письмо автору
 
   для: cheops   (21.05.2011 в 11:39)
 

нет.

Задумка такая. Есть парсер, который может отправлять запрос раз в 1 секунду. Но к этому парсеру могут в один момент обратиться 50 человек, и значит парсер забанят. Чтобы этого избежать я буду в БД записывать время time(), потом буду его извлекать и сразу же записывать реальное время на 1 больше.

Потом когда будет следушее обращение оно тоже ивлечет время которое было записано и посмотрит
while($res['maketime']>time()) sleep(1);

Таким образом добиваемся очереди.

Т.е. запрос к базе должен получить время и одновреммено записать туда РЕАЛЬНОЕ время на единицу больше.

ПС. РЕАЛЬНОЕ - значит time() а не то что было до этого в БД

  Ответить  
 
 автор: cheops   (21.05.2011 в 12:54)   письмо автору
 
   для: ntro123   (21.05.2011 в 11:46)
 

Правильно ли я понял, что вам нужно, пока вы выбираете и обновляете время, чтобы никто другой не залез с добавлением данных в таблицу? Если да, вам нужны транзакции (т.е. таблицы типа InnoDB).

  Ответить  
 
 автор: ntro123   (21.05.2011 в 13:12)   письмо автору
 
   для: cheops   (21.05.2011 в 12:54)
 

Нет.

Мне нужно из поля maketime выташить его значение, и записать абсолютно другое значение.

В 2 командах это делается вот так

SELECT maketime FROM time

UPDATE time SET maketime='тут что угодно из цифр'

хотелось бы это все в 1 запрос, т.к. выигрыш будет весомым.

  Ответить  
 
 автор: cheops   (21.05.2011 в 13:16)   письмо автору
 
   для: ntro123   (21.05.2011 в 13:12)
 

Тогда в один запрос никак объединить не удастся.

  Ответить  
 
 автор: ntro123   (21.05.2011 в 13:20)   письмо автору
 
   для: cheops   (21.05.2011 в 13:16)
 

ясно, спасибо, а то сейчас бы рыл до потери пульса как объединить!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования