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

Форум MySQL

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

 

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

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

тема: Проблемы с логикой UPDATE
 
 автор: OLi   (07.10.2011 в 00:44)   письмо автору
 
 

Пытаюсь сделать UPDATE для двух таблиц в базе
1 таблица companes
2 таблица filials
__________
В таблице 1 есть поля id, fil
В таблице 2 есть поле id, fil
Связь происходит по полям fil=fil
___
Необходимо сделать UPDATE всех записей и назначить для fil значение id этой записи (в таблице 1)
И для таблицы 2 для поля fil каждой записи обновить fil на значение id записи из 1 таблицы
______________
Во что сделал:




<?
while ($row_a=mysql_fetch_array($select_all_rows)){

$quer=mysql_query("select id,fil from filials where fil=".$row_a['fil']."");
while (
$row_2=mysql_fetch_array($quer)){
//echo $row_2['fil'].'>>'.$row_a['id'].'<br>';
mysql_query("update filials SET fil= '".$row_a['id']."' where fil=".$row_a['fil']."");
//echo "update filials SET fil= '".$row_a['id']."' where fil=".$row_2['fil']."<br>";
mysql_query("update companes set fil=".$row_a['id']." where id=".$row_a['id']."");
//echo "update companes set fil=".$row_a['id']." where id=".$row_a['id']."";
}
?>
}


Обновление companes проходит правильно, а вот filials - в fil заносит другое значение id..
В чем ошибка логики, вроде как все верно?!

  Ответить  
 
 автор: cheops   (07.10.2011 в 10:05)   письмо автору
 
   для: OLi   (07.10.2011 в 00:44)
 

Не понятно зачем запрос и его результат $row_2, если дальше $row_2 нигде не используется?
<?php
$quer
=mysql_query("select id,fil from filials where fil=".$row_a['fil'].""); 
while (
$row_2=mysql_fetch_array($quer)){
?>

>Обновление companes проходит правильно, а вот filials - в fil заносит другое значение id..
>В чем ошибка логики, вроде как все верно?!
Скорее всего дело вот в чем, так как вы не используете многотабличный UPDATE-запрос, вы записи перебираете одну за другой после смены fil на новый id, эти записи могут снова и снова подвергаться изменению, особенно, если такой fil следует далее вниз по таблице.

  Ответить  
 
 автор: OLi   (07.10.2011 в 10:06)   письмо автору
 
   для: cheops   (07.10.2011 в 10:05)
 

Хорошо, какой выход, иного пути пока не вижк

  Ответить  
 
 автор: cheops   (07.10.2011 в 10:19)   письмо автору
 
   для: OLi   (07.10.2011 в 10:06)
 

Можно попробовать обновлять таблицы companes и filials одновременно в едином многотабличном UPDATE-запросе
UPDATE companes JOIN filials ON ... SET ...

Если у вас вызывает сложность создание запроса, прикрепите кусочек SQL-дампа (или вышлите мне на igor@softtime.ru), чтобы у меня была возможность отладить запрос.

  Ответить  
 
 автор: OLi   (07.10.2011 в 11:37)   письмо автору
 
   для: cheops   (07.10.2011 в 10:19)
 

Отправил вам на почту. Благодарю за помощь!

  Ответить  
 
 автор: cheops   (07.10.2011 в 14:48)   письмо автору
 
   для: OLi   (07.10.2011 в 11:37)
 

Попробуйте следующий UPDATE-запрос
UPDATE
 companes AS c
LEFT JOIN
 filials AS f
ON
  c.fil = f.fil
SET
  c.fil = c.id,
  f.fil = c.id

  Ответить  
 
 автор: OLi   (07.10.2011 в 16:30)   письмо автору
 
   для: cheops   (07.10.2011 в 14:48)
 

Для таблицы companes сработал верно а для filials не занеc id в поле fil

  Ответить  
 
 автор: cheops   (07.10.2011 в 16:57)   письмо автору
 
   для: OLi   (07.10.2011 в 16:30)
 

Назовите номер записи, по которой осуществляется проверка? Для этой записи таблицы filials есть связь с таблицей companes (у меня вроде все связанные строки обновились)?

  Ответить  
 
 автор: OLi   (07.10.2011 в 17:22)   письмо автору
 
   для: cheops   (07.10.2011 в 16:57)
 

Номер записи таков:
Companes
_______
id=2144
fil=1346 ->2144


filials
_____
id=2704 fil=1346 ->2144
id=2705 fil=1346 ->2144

##########
-> указывает на что должно смениться

  Ответить  
 
 автор: cheops   (07.10.2011 в 17:58)   письмо автору
 
   для: OLi   (07.10.2011 в 17:22)
 

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

  Ответить  
 
 автор: OLi   (07.10.2011 в 20:10)   письмо автору
 
   для: cheops   (07.10.2011 в 17:58)
 

Отправлю вам дамп, где есть этот кусок - прошу прощения за неточность

  Ответить  
 
 автор: OLi   (08.10.2011 в 02:35)   письмо автору
 
   для: OLi   (07.10.2011 в 20:10)
 

cheops - все ли нужное я отправил или есть еще замечания?

  Ответить  
 
 автор: OLi   (08.10.2011 в 13:48)   письмо автору
 
   для: OLi   (08.10.2011 в 02:35)
 

Все - спасибо - разобрался

  Ответить  
 
 автор: OLi   (08.10.2011 в 14:12)   письмо автору
 
   для: OLi   (08.10.2011 в 13:48)
 

Проблема одна:
в companes все нормально - обновило как надо

в filials d=2705 fil=1346
не сделало замену 1346 на 2144 (id из companes где f.fil=c.fil)

  Ответить  
 
 автор: cheops   (08.10.2011 в 14:47)   письмо автору
 
   для: OLi   (08.10.2011 в 14:12)
 

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

  Ответить  
 
 автор: OLi   (09.10.2011 в 15:56)   письмо автору
 
   для: cheops   (08.10.2011 в 14:47)
 

OK ждемс

  Ответить  
 
 автор: OLi   (15.10.2011 в 03:58)   письмо автору
 
   для: OLi   (09.10.2011 в 15:56)
 

Что же так заглохло все?

  Ответить  
Rambler's Top100
вверх

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