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

Форум MySQL

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

 

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

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

тема: Объединение запросов
 
 автор: kapitalist   (08.12.2014 в 17:47)   письмо автору
 
 

Всем доброго времени суток. Есть скрипт, который пробегает по xml файлу и заносит данные в БД. Вопрос возможно ли в данном случае объединить запрос в Select Update и Select Insert? И вообще имеет ли это смысл?

$yml = simplexml_load_file($url);
    mb_internal_encoding("UTF-8");

    foreach ($yml->shop->offers->offer as $item) {
        $name = $item->name;
        $price = $item->price;
        $ed = $item->ed;
        $num = $item->num;
        $country = $item->country;
        
        $sql = "SELECT id FROM `sklad` WHERE `name`='".mysql_real_escape_string($name)."' and `id_company`='".mysql_real_escape_string($company)."' LIMIT 1";
        $sql = mysql_query($sql) or die(mysql_error());
        if (mysql_num_rows($sql) > 0) {
            $row = mysql_fetch_assoc($sql);
            $update = mysql_query ("UPDATE `sklad` SET price='".mysql_real_escape_string($price)."' WHERE id='$row[id]'");
        }
        else {
            $insert = mysql_query ("INSERT INTO `sklad` (name, price, ed, num, country, id_company) VALUES ('$name','$price','$ed','$num','$country','$company')");
        }
    }

  Ответить  
 
 автор: Trianon   (08.12.2014 в 21:16)   письмо автору
 
   для: kapitalist   (08.12.2014 в 17:47)
 

Есть объединенная форма
INSERT .... ON DUPLICATE KEY  UPDATE ...


Позволяет одним запросом добавлять / заменять сразу ряд строк

  Ответить  
 
 автор: Valick   (08.12.2014 в 21:18)   письмо автору
 
   для: Trianon   (08.12.2014 в 21:16)
 

хотел проверить будет ли работать
INSERT ...SELECT .... ON DUPLICATE KEY UPDATE ...

  Ответить  
 
 автор: Trianon   (08.12.2014 в 21:21)   письмо автору
 
   для: Valick   (08.12.2014 в 21:18)
 

вроде как это компоненты не связанные одна с другой - почему бы и нет?
Правда в данном случае SELECT как-то без пользы.

  Ответить  
 
 автор: Valick   (08.12.2014 в 21:26)   письмо автору
 
   для: Trianon   (08.12.2014 в 21:21)
 

kapitalist, просил селект, правда в общую картину я не вникал

  Ответить  
 
 автор: Trianon   (08.12.2014 в 21:35)   письмо автору
 
   для: Valick   (08.12.2014 в 21:26)
 

не просил он селект.
У него есть внешний (из XML) набор строк, которые он хочет загнать в таблицу (либо новыми, если в таблице еще нет ключей, либо обновить определенные поля в старых строках - если уже есть) .
Кроме как чтоб определиться, есть уже ключ, или нет - SELECT ему не нужен.
В чистом виде INSERT ... ON DUPLICATE KEY UPDATE
Вот, даже пример нашел старый.

  Ответить  
 
 автор: Valick   (08.12.2014 в 21:48)   письмо автору
 
   для: Trianon   (08.12.2014 в 21:35)
 

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

  Ответить  
 
 автор: kapitalist   (09.12.2014 в 11:20)   письмо автору
 
   для: Trianon   (08.12.2014 в 21:16)
 

Всем спасибо, не ожидал такого живого обсуждения )))
Вот вы говорите избавиться от запросов в цикле. А это как?! Так или иначе мне нужно проверить наличие строки в БД.
INSERT ... ON DUPLICATE KEY UPDATE - судя по всему хороший вариант... К сожалению не умею им пользоваться, но буду учиться.

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

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