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

Форум MySQL

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

 

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

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

тема: UPDATE нескольких столбцов
 
 автор: Loki   (12.04.2007 в 12:05)   письмо автору
 
 

нужно обновить сразу несколько столбцов таблицы, взяв информацию из другой таблицы
то есть конструкция такого вида:

UPDATE table1 SET field1=(SELECT field1 FROM table2  WHERE ...), field2=(SELECT field2 FROM table2  WHERE ...)

Как видно, вложенные запросы одинаковые и вполне могли бы быть выполнены всего один раз. Есть ли такая возможность в mysql?

   
 
 автор: Trianon   (12.04.2007 в 12:22)   письмо автору
 
   для: 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 ...

   
 
 автор: Loki   (12.04.2007 в 12:39)   письмо автору
 
   для: Trianon   (12.04.2007 в 12:22)
 

Непонятно как в этом случае быть с условием. Если, например, вложенный запрос выглядит так:

UPDATE table1 SET field1=(SELECT field1 FROM table2  WHERE user_id=1 ORDER BY putdate DESC LIMIT 1), ...

   
 
 автор: Trianon   (12.04.2007 в 12:47)   письмо автору
 
   для: Loki   (12.04.2007 в 12:39)
 

значения внутреннего запроса меняются от строки к строке или постоянны?
структуру бы посмотреть.
ORDER BY и LIMIT во внутреннем запросе - моветон.

   
 
 автор: Loki   (13.04.2007 в 11:55)   письмо автору
 
   для: 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
У меня наблюдается презанятнейший эффект!

   
 
 автор: Trianon   (13.04.2007 в 12:02)   письмо автору
 
   для: Loki   (13.04.2007 в 11:55)
 

Господа и дамы, не проходите мимо, пожалуйста.
Просто у меня этот запрос работает совершенно нормально, а у Loki - оказывается отвергнутым. При том, что у меня и сервер и pma - младше.

Дамп структуры и тестовых данных (там немного) в аттаче предыдущего постинга Loki


Проверьте, кто может. Очень хочется установить, где собака.

   
 
 автор: cheops   (13.04.2007 в 12:54)   письмо автору
 
   для: Loki   (13.04.2007 в 11:55)
 

Запрос отработал штатно, результат во вложении (MySQL 5.0.26, Windows).

   
 
 автор: Loki   (13.04.2007 в 13:19)   письмо автору
 
   для: cheops   (13.04.2007 в 12:54)
 

Методом исключения, пришел к выводу что не хватает каких-то прав. Так как из под рута данный запрос срабатывает нормально.
Права сейчас стоят такие:

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES


На другом хостинге, с этим же набором прав запрос работает нормально. В общем, куда копать пока непонятно.

   
 
 автор: Trianon   (13.04.2007 в 13:28)   письмо автору
 
   для: Loki   (13.04.2007 в 13:19)
 

Я оставил у себя

SELECT, INSERT, UPDATE, DELETE

и попробовал.
Идет запрос.

   
 
 автор: Loki   (13.04.2007 в 13:30)   письмо автору
 
   для: Trianon   (13.04.2007 в 13:28)
 

а у меня сервер отвечает:

#1044 - Access denied for user 'user'@'localhost' to database '' 

   
 
 автор: Trianon   (13.04.2007 в 13:40)   письмо автору
 
   для: Loki   (13.04.2007 в 13:30)
 

есть подозрение, что права на таблицы db, host, user служебной базы 'mysql' расставлены некорректно. И сервер не в состоянии определить привилегии пользователя.

   
 
 автор: cheops   (13.04.2007 в 15:15)   письмо автору
 
   для: Loki   (13.04.2007 в 13:30)
 

Посмотрите действительно таблицу mysql.db - нет там никаких подозрительных записей?

   
Rambler's Top100
вверх

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