|
|
|
| нужно обновить сразу несколько столбцов таблицы, взяв информацию из другой таблицы
то есть конструкция такого вида:
UPDATE table1 SET field1=(SELECT field1 FROM table2 WHERE ...), field2=(SELECT field2 FROM table2 WHERE ...)
|
Как видно, вложенные запросы одинаковые и вполне могли бы быть выполнены всего один раз. Есть ли такая возможность в mysql? | |
|
|
|
|
|
|
|
для: Loki
(12.04.2007 в 12:05)
| | Это делается соединением.
UPDATE table1 JOIN table2 ON table1.key = table2.key
SET
table1.field1 = table2.field1,
table1.field2 = table2.field2,
....
WHERE ...
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.04.2007 в 12:22)
| | Непонятно как в этом случае быть с условием. Если, например, вложенный запрос выглядит так:
UPDATE table1 SET field1=(SELECT field1 FROM table2 WHERE user_id=1 ORDER BY putdate DESC LIMIT 1), ...
|
| |
|
|
|
|
|
|
|
для: Loki
(12.04.2007 в 12:39)
| | значения внутреннего запроса меняются от строки к строке или постоянны?
структуру бы посмотреть.
ORDER BY и LIMIT во внутреннем запросе - моветон. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2007 в 12:47)
| | у кого-нибудь есть возможность протестировать запрос:
UPDATE forums JOIN
(
SELECT t.forum_id, t.last_user, tl.last as last_post FROM themes t JOIN (
SELECT forum_id, max(last_post) as last FROM themes GROUP BY forum_id
)as tl ON t.last_post=tl.last
) as src ON forums.forum_id = src.forum_id
SET forums.last_post = src.last_post,
forums.last_user = src.last_user;
|
на версии 5.0.26
У меня наблюдается презанятнейший эффект! | |
|
|
|
|
|
|
|
для: Loki
(13.04.2007 в 11:55)
| | Господа и дамы, не проходите мимо, пожалуйста.
Просто у меня этот запрос работает совершенно нормально, а у Loki - оказывается отвергнутым. При том, что у меня и сервер и pma - младше.
Дамп структуры и тестовых данных (там немного) в аттаче предыдущего постинга Loki
Проверьте, кто может. Очень хочется установить, где собака. | |
|
|
|
|
|
|
|
для: Loki
(13.04.2007 в 11:55)
| | Запрос отработал штатно, результат во вложении (MySQL 5.0.26, Windows). | |
|
|
|
|
|
|
|
для: cheops
(13.04.2007 в 12:54)
| | Методом исключения, пришел к выводу что не хватает каких-то прав. Так как из под рута данный запрос срабатывает нормально.
Права сейчас стоят такие:
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES
|
На другом хостинге, с этим же набором прав запрос работает нормально. В общем, куда копать пока непонятно. | |
|
|
|
|
|
|
|
для: Loki
(13.04.2007 в 13:19)
| | Я оставил у себя
SELECT, INSERT, UPDATE, DELETE
|
и попробовал.
Идет запрос. | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 13:28)
| | а у меня сервер отвечает:
#1044 - Access denied for user 'user'@'localhost' to database ''
|
| |
|
|
|
|
|
|
|
для: Loki
(13.04.2007 в 13:30)
| | есть подозрение, что права на таблицы db, host, user служебной базы 'mysql' расставлены некорректно. И сервер не в состоянии определить привилегии пользователя. | |
|
|
|
|
|
|
|
для: Loki
(13.04.2007 в 13:30)
| | Посмотрите действительно таблицу mysql.db - нет там никаких подозрительных записей? | |
|
|
|