|
|
|
| Пытаюсь сделать 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..
В чем ошибка логики, вроде как все верно?! | |
|
|
|
|
|
|
|
для: 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 следует далее вниз по таблице. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 10:05)
| | Хорошо, какой выход, иного пути пока не вижк | |
|
|
|
|
|
|
|
для: OLi
(07.10.2011 в 10:06)
| | Можно попробовать обновлять таблицы companes и filials одновременно в едином многотабличном UPDATE-запросе
UPDATE companes JOIN filials ON ... SET ...
|
Если у вас вызывает сложность создание запроса, прикрепите кусочек SQL-дампа (или вышлите мне на igor@softtime.ru), чтобы у меня была возможность отладить запрос. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 10:19)
| | Отправил вам на почту. Благодарю за помощь! | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 14:48)
| | Для таблицы companes сработал верно а для filials не занеc id в поле fil | |
|
|
|
|
|
|
|
для: OLi
(07.10.2011 в 16:30)
| | Назовите номер записи, по которой осуществляется проверка? Для этой записи таблицы filials есть связь с таблицей companes (у меня вроде все связанные строки обновились)? | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 16:57)
| | Номер записи таков:
Companes
_______
id=2144
fil=1346 ->2144
filials
_____
id=2704 fil=1346 ->2144
id=2705 fil=1346 ->2144
##########
-> указывает на что должно смениться | |
|
|
|
|
|
|
|
для: OLi
(07.10.2011 в 17:22)
| | Мой кусок дампа, к сожалению, заканчивается на 856 номере (таких больших у меня уже нет). | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 17:58)
| | Отправлю вам дамп, где есть этот кусок - прошу прощения за неточность | |
|
|
|
|
|
|
|
для: OLi
(07.10.2011 в 20:10)
| | cheops - все ли нужное я отправил или есть еще замечания? | |
|
|
|
|
|
|
|
для: OLi
(08.10.2011 в 02:35)
| | Все - спасибо - разобрался | |
|
|
|
|
|
|
|
для: OLi
(08.10.2011 в 13:48)
| | Проблема одна:
в companes все нормально - обновило как надо
в filials d=2705 fil=1346
не сделало замену 1346 на 2144 (id из companes где f.fil=c.fil) | |
|
|
|
|
|
|
|
для: OLi
(08.10.2011 в 14:12)
| | Пока не добрался до письма, чуть попозже отпишусь. | |
|
|
|
|
|
|
|
для: cheops
(08.10.2011 в 14:47)
| | OK ждемс | |
|
|
|
|
|
|
|
для: OLi
(09.10.2011 в 15:56)
| | Что же так заглохло все? | |
|
|
|