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

Форум MySQL

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

 

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

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

тема: Многотабличный UPDATE
 
 автор: barba   (10.06.2008 в 09:15)   письмо автору
 
 

Есть N таблиц с одинаковым полем ID (PRIMARY KEY) запрос UPDATE T1 SET T1.ID='newValue' where T1.ID='OldValue' работает. Почему может не работать запрос: UPDATE T1, T2..., Tn SET T1.ID='newValue', T2.ID='newValue', ...Tn.ID='newValue' WHERE T1.ID='OldValue' , T2.ID='OldValue', ... Tn.ID='OldValue' ? Спасибо

   
 
 автор: mechanic   (10.06.2008 в 09:30)   письмо автору
 
   для: barba   (10.06.2008 в 09:15)
 

кто ж условия where через запятую перечисляет?

   
 
 автор: AcidTrash   (10.06.2008 в 10:04)   письмо автору
 
   для: barba   (10.06.2008 в 09:15)
 

Условия разделяются AND или OR (и, или). В вашем случае полагаю, что AND.

   
 
 автор: barba   (10.06.2008 в 16:27)   письмо автору
 
   для: AcidTrash   (10.06.2008 в 10:04)
 

Честно говоря - это просто описка в вопросе. В коде конечно же and и без запятой, но все равно не работает. Не выдает никакой ошибки, просто не не меняет запись. 0 rows (0.00 sec)

   
 
 автор: olejek   (10.06.2008 в 17:00)   письмо автору
 
   для: barba   (10.06.2008 в 16:27)
 

Многотабличный запрос на обновление записей отличается от однотабличного.
Из справочника MySQL:

Single-table syntax: 

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
    SET col_name1=expr1 [, col_name2=expr2 ...]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

Multiple-table syntax: 

UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET col_name1=expr1 [, col_name2=expr2 ...]
    [WHERE where_condition]


Оттуда же:

You can also perform UPDATE operations covering multiple tables. The table_references clause lists the tables involved in the join. Here is an example: 

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;


Т.е, должны быть установлены связи между таблицами, а у Вас их нет.
И по-моему, в вашем случае вообще нет необходимости в таком запросе.

   
 
 автор: AcidTrash   (10.06.2008 в 17:20)   письмо автору
 
   для: olejek   (10.06.2008 в 17:00)
 

Не досмотрел, что многотабличный запрос.

   
 
 автор: barba   (11.06.2008 в 07:46)   письмо автору
 
   для: olejek   (10.06.2008 в 17:00)
 

В моем случае имеется несколько таблиц, в каждой из которых могут быть строки, относящиеся к одному и тому же объекту. Я пытаюсь организовать подобие каскадного изменения общего атрибута(назовем его ID). Согласен, если items апдейтится данными из month - то связь нужна, но я тружусь над возможностью изменить ID с старого на новый во всех таблицах одной строкой(одним запросом)??????

   
 
 автор: olejek   (11.06.2008 в 10:37)   письмо автору
 
   для: barba   (11.06.2008 в 07:46)
 

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

   
Rambler's Top100
вверх

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