MYSQL как передать результаты SELECTа одной таблиы, на UPDATE в другую одним запросом

12 3
M
На сайте с 20.08.2004
Offline
376
1568

MYSQL как передать результаты SELECTа одной таблиы, на UPDATE в другую, одним запросом?

update tmp (user_id, user_posts) values (
select a.poster_id, count(a.poster_id) from phpbb_posts a
where a.poster_id=4 && a.forum_id <> 30 && a.poster_id>3
GROUP BY a.poster_id) where poster_id=4

спасибо.

отец сыночка, лапочки дочки и еще одного сыночка
СКОРПИОН
На сайте с 05.01.2006
Offline
120
#1

Нет такой буквы в этом алфавите...

Можно только Insert ... Select делать. Ну и, соответственно, Replace.

• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
M
На сайте с 20.08.2004
Offline
376
#2

очень обидно.Но вроде такое возможно. когда то делал, если не ошибаюсь, но найти в своих данных не нашел...

спасибо.

K
На сайте с 14.08.2006
Offline
56
ksm
#3

Если используете MySQL 5, то можно сделать эти запросы в процедуре и потом вызывать одной командой.

QAвед-sunтехник
Oniks
На сайте с 22.08.2005
Offline
176
#4

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

Профессиональные услуги фотографа в Москве и области (http://www.oniks-photo.ru/) покупаю стать и ссылки с сайтов про охоту
D
На сайте с 21.06.2006
Offline
168
#5

REPLACE ... SELECT

В отличие от UPDATE можно выбирать и реплейсить в одну и ту же таблицу.

Майскл правда торчит, но это мелочи ;)

Appstorespy - платформа анализа мобильных сторов | Publa.io - готовая инфраструктура для приема платежей и оплаты рекламных кабинетов в бурже
[Удален]
#6
Miracle:
update tmp (user_id, user_posts) values (
select a.poster_id, count(a.poster_id) from phpbb_posts a
where a.poster_id=4 && a.forum_id <> 30 && a.poster_id>3
GROUP BY a.poster_id) where poster_id=4

Попытался понять что делает этот запрос так и не понял почему он выбирает "poster_id>3 AND poster_id=4" (смысл ?)

Имхо лучше чем точнее сформулируете вопрос тем точнее я отвечу... (в правильно заданном вопросе содержится 75% правильного ответа)

[Удален]
#7
Oniks:
Если мне не изменяет память, когда-то в мускуле можно было делать подзапросы

Можно, у меня есть например в одном из скриптов запрос типа

INSERT INTO tmp (time, val) VALUES( UNIX_TIMESTAMP(), (SELECT asd FROM .......) );

просто надо более точно понимать что и куда запрашивать... (а то что делается в этом топике это гадание на кофейной гуще)

B
На сайте с 06.04.2006
Offline
24
#8
Зингельшухер:
Можно, у меня есть например в одном из скриптов запрос типа

просто надо более точно понимать что и куда запрашивать... (а то что делается в этом топике это гадание на кофейной гуще)

Насколько помню, для этого SELECT должен возвращать одно поле, это как раз Ваш случай.

У ТС полей несколько, в этом случае не выйдет.

Правда, может в 5.1 по-другому всё.

Мониторинг сайтов (http://hostpulse.ru/), серверов, проверка содержимого страниц.
[Удален]
#9
blaize:
У ТС полей несколько

Так можно сделать 2 и более одиночных селектов :)

INSERT INTO tmp (time, val, val2) VALUES( UNIX_TIMESTAMP(), (SELECT asd FROM .......), (SELECT fgh FROM .......) );

Аналогично и у ТС можно так забубенить (хотя не вижу причин не сделать просто 2 запроса, один селект и один апдейт)

M
На сайте с 20.08.2004
Offline
376
#10

С инсетром проблем нету. Такое возможно сделать, а вот обновить как одним запросом не получается.

Зингельшухер:
"poster_id>3 AND poster_id=4" (смысл ?)
вы правы, просто я тестрировал так, вобще то надо было сделать для всех пользователей где айди больше 3, но решил эксперементировать на одном, удалять poster_id>3, не стал, так как если бы заработал скрипт, то его писать бы не пришлось, а poster_id=4 просто убрал бы. Своего рода что бы не забыть. Но это к делу не относится.
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий