1

Здравствуйте! Имеется задача, чтобы данные из 1 таблицы перекинуть в другую. Структуры у них разные, но 2 колонки одинаковые в обеих таблицах. Именно с ними и надо работать. В первой таблице поле model пустое, а во втором оно есть. Нужно вставить из 2 таблицы в первую model , но при условии, что name из второй таблицы есть во первой. Если нету не надо перекидывать.

$sql1 = 'SELECT `name`, `model` FROM `bigm`';
$sql2 = 'SELECT `name`, `model` FROM `bigd`';
                $result1 = mysqli_query($link, $sql1);
                $result2 = mysqli_query($link, $sql2);

                $count = 0;
                for($i=0;$i < mysqli_num_rows($result1);$i++){
                    $row1 = mysqli_fetch_assoc($result1);
                    $row2 = mysqli_fetch_assoc($result2); 
                        if($row1['name'] == $row2['name']){
                         $sql3 = 'UPDATE `bigm` SET `model` = '.$row2['model'].' WHERE `name` = "'.$row2['name'].'"';
                            mysqli_query($link,$sql3);
                            $count++;
                        }
                }
                echo $count;

2 ответа 2

1

Что тут сложного ? Если я правильно вас понял, то вам нужно значения сравнивать ? делайте обычную проверку if($row1['model'].... а вообще перепишите свой код ! это ужас. Например, что бы не писал тысячу раз mysqli_query... используйте mysqli_multi_query.

Так же как вариант можно использовать оператор JOIN...

P.S. Для чего заменили mysql на mysqli ? Я думаю не для того что бы мы так же на нем писали как и на mysql... Новых функций полно, и специально для удобства.

2
  • > P.S. Для чего заменили mysql на mysqli ? Я думаю не для того что бы мы так же на нем писали как и на mysql... Новых функций полно, и специально для удобства. Хорошая попытка, но нет. Расширение писсали не для того, чтобы мы, словно копающиеся в песочнице пятилетние дети, получили новую игрушку и разнообразили свой нехитрый быт. Расширение продвигает ООП, prepared statements и транзакции, но это не значит, что простые примеры надо обязательно писать как-то по-другому.
    – etki
    1 авг 2014 в 20:00
  • Я уже делаю проверку, но не model, а name. Мне нужна именно там проверка. По поводу того, как использовать mysqli, решать мне. У меня задача сделать не красивый и качественный код, а перенос данных из 1 таблицы в другую с условием. Использую PHP, т.к. в не могу составить грамотный запрос в SQL из-за нехватки опыта.
    – lolokot
    1 авг 2014 в 20:08
0

В первой таблице поле model пустое, а во втором оно есть. Нужно вставить из 2 таблицы в первую model, но при условии, что name из второй таблицы есть во первой. Если нету не надо перекидывать.

UPDATE tbl1
SET tbl1.model = (SELECT tbl2.model FROM tbl2 WHERE tbl2.name = tbl1.name)
WHERE EXISTS (SELECT 1 FROM tbl2 WHERE tbl2.name = tbl1.name)

Ставлю десять баксов на то, что движок БД достаточно умный и WHERE EXISTS не нужен (и еще пять на то, что я где-то напутал и запрос не заведется).

5
  • Уже делал такой запрос. Не работает.
    – lolokot
    1 авг 2014 в 20:10
  • @lolokot да неужели sqlfiddle.com/#!2/06743/1
    – etki
    1 авг 2014 в 20:22
  • Запрос уходит в обработку и виснит. При этом ничего не выполняя. Может ли из-за небольшой разницы в структуре это быть? 1 таблица name varchar(255) model double 2 таблицы name varchar(64) model double В добавок у первой есть id (prumary key), а у 2 нету.
    – lolokot
    2 авг 2014 в 5:21
  • @lolokot количество записей в таблицах?
    – etki
    2 авг 2014 в 7:21
  • В первой 44 219, во второй чуть больше 50 000. Причем во второй могут нах-ся имена которых нету в первой. Мне нужно лишь те model, чьи имена есть в обеих.
    – lolokot
    2 авг 2014 в 10:51

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.