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

123
[Удален]
#11

Miracle, так попробуй то о чём написано выше

update tmp (user_id, user_posts) values ( (select user_id from ...), (select user_posts from ...) );

Т.е разбей запрос на несколько, главное чтоб SELECT возвращал только один результат и только одно поле

[Удален]
#12

Вот на реальной базе сейчас попробовал (на MySQL-4.0 не сработает, а вот с MySQL-4.1 нормально)

UPDATE `phpbb_users` SET `user_posts` = (SELECT COUNT(`poster_id`) FROM `phpbb_posts` WHERE `phpbb_posts`.`poster_id` = 2) WHERE `phpbb_users`.`user_id` =2;
B
На сайте с 06.04.2006
Offline
24
#13
Зингельшухер:
Аналогично и у ТС можно так забубенить (хотя не вижу причин не сделать просто 2 запроса, один селект и один апдейт)

Вот именно. :) Если одним запросом не сделать - тогда уж проще достать данные и закинуть их.

Если запросов много получится - то одной транзакцией (Если innodb). И все дела. :)

Мониторинг сайтов (http://hostpulse.ru/), серверов, проверка содержимого страниц.
D
На сайте с 21.06.2006
Offline
168
#14
Зингельшухер:
update tmp (user_id, user_posts) values ( (select user_id from ...), (select user_posts from ...) );

Такой синтаксис не поддерживается MySQL(не уверен насчет 5.0)

Зингельшухер:
UPDATE `phpbb_users` SET `user_posts` = (SELECT COUNT(`poster_id`) FROM `phpbb_posts` WHERE `phpbb_posts`.`poster_id` = 2) WHERE `phpbb_users`.`user_id` =2;

А так нельзя обновить всех юзеров 1 запросом ;)

REPLACE SELECT спасет отца демократии, я уже писал выше.

Appstorespy - платформа анализа мобильных сторов | Publa.io - готовая инфраструктура для приема платежей и оплаты рекламных кабинетов в бурже
[Удален]
#15

Dash, я знаю, просто скопировал из первого сообщения так как пьян был и не смотрел что копирую, мои рабочие запросы (которые в скриптах) выглядят более похожими на то что в последнем сообщении

UPDATE `phpbb_users` SET `user_posts` = (SELECT COUNT(`poster_id`) FROM `phpbb_posts` WHERE `phpbb_posts`.`poster_id` = 2) WHERE `phpbb_users`.`user_id` =2;
Dash:
А так нельзя обновить всех юзеров 1 запросом

Всех нет, а в цикле вполне (именно по этому не понимаю почему нужен один запрос, ведь такая "фишка" нужна далеко не при каждом открытии страницы, я бы даже сказал не каждый день такое пригодится)

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

Вообщем решение еще не найдено, ни один из вариантов предложеных не сработал.

Спасибо всем кто включился в помощь, если будут еще решения выслушаю. Спокойно моегу это сделать двумя запросами скроптом на пхп, но чет завелся над этим... :)

Еще раз всем спасибо :)

отец сыночка, лапочки дочки и еще одного сыночка
M
На сайте с 20.08.2004
Offline
376
#17

Постарался никого не забыть кто помогал :), помню , помню, что спасибо в постель не пожложишь и в стакан не нальешь :)

[Удален]
#18
Miracle:
ни один из вариантов предложеных не сработал.
Miracle:
если будут еще решения выслушаю.

Предложение выложи сюда задачу чтоб мы её решили, а то ты даёшь куски по которым не понять что ты хочешь... (может ты изобретаешь велосипед и всё давно уже изобретено)

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

Возможно вы и правы.

Вообщем есть задача пересчитать кол-во собщений пользователей на форуме phpbb, без учета определенных подразделов.

1. мы вычситываем сколько сообщений оставил пользователь исключая не нужные подразделы

2. обновляем записи для пользователя.

Те. начальные установки (дополнение) к моду которые не считае сообщение из определенных подразделов.

Спасибо

D
На сайте с 21.06.2006
Offline
168
#20

REPLACE tmp (user_id, user_posts,nochange)

select a.poster_id, count(a.poster_id),tmp.nochange from phpbb_posts a,tmp

where tmp.user_id=a.poser_id

GROUP BY a.poster_id

123

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