Обновите второй столбец, если первый столбец имеет то же значение

Я импортирую CSV и сохраняю значения в базе данных, а затем отображаю их на странице php.

CSV

Обновите второй столбец, если первый столбец имеет то же значение

страница php

Обновите второй столбец, если первый столбец имеет то же значение

Требование:

теперь, когда я импортирую другой CSV, если значение первого столбца [AWB] такое же [уже существует в БД], то я хочу обновить второй столбец CSV.

Проблема :

Но сейчас это не импорт, а просто пропуск ....

if (isset($_POST["Import"])){

         $filename=$_FILES["file"]["tmp_name"];     

         if ($_FILES["file"]["size"] > 0)
         {
            $file = fopen($filename, "r");
            $i=0;
            while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
             {

                $getData = array_map("utf8_encode", $getData); 

                if ($i==0){$i++;continue;}


                $sql = "INSERT into do_order (tracking_id,
                order_id                    
                ) 

                   values ('".mysqli_real_escape_string($conn , $getData[0])."',
                   '".mysqli_real_escape_string($conn , $getData[1])."'                
                   )";

                  // print $sql;
                  // die(); 
                   $result=$db_handle->executeUpdate($sql);
                  // print_r($db_handle->errorInfo());

                if (!isset($result))
                {
                    echo "";        
                }
                else {
                      echo "";
                }
                $i++;
             }

             fclose($file); 
         }
    }    
echo "";

ну, используйте UPDATE вместо INSERT, или, если хотите, используйте INSERT ... ON DUPLICATE KEY UPDATE, если столбец AWB является вашим первичным ключом

Karsten Koop 15.03.2018 08:47

кстати, вы должны использовать подготовленные операторы вместо этого материала mysqli_real_escpape_string, что значительно упрощает понимание вашего SQL и лучше защищает от SQL-инъекций.

Karsten Koop 15.03.2018 08:48

@KarstenKoop, спасибо, я попробовал UPDATE, но у меня ничего не вышло ...

user8444404 15.03.2018 08:50

@KarstenKoop Я использую столбец id как primary key, а не awb .....

user8444404 15.03.2018 08:52

поместите уникальный ключ на awb и сделайте то, что говорит @KarstenKoop.

Cemal 15.03.2018 08:59

@Cemal это правильно: $sql = "UPDATE into do_order set unique_key = 'tracking_id' (tracking_id, order_id)

user8444404 15.03.2018 09:05

Насчет названий столбцов не уверен, поправьте сами. Ваши изображения говорят, что у вас есть столбец ORDERID, ваш код сообщает, что у вас есть order_id, и вы просите tracking_id

Cemal 15.03.2018 09:15

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

user8444404 15.03.2018 09:16

нужно делать ALTER TABLE только один раз, а не в каждой вставке

Cemal 15.03.2018 09:18

попробуйте это (case in mysql) - INSERT INTO do_order (tracking_id, order_id) VALUES ((CASE tracking_id WHEN '37' THEN NULL ELSE tracking_id END), (CASE order_id WHEN '4' THEN NULL ELSE order_id END));

vijaybir singh 15.03.2018 09:21

@Cemal, я пробовал, как вы сказали: pastebin.com/1JnsRch0, но у меня это не сработало ....

user8444404 15.03.2018 09:25

@vickeycolors: вы можете использовать тот же способ для обновления, а также просто изменить запрос

vijaybir singh 15.03.2018 09:32

@vickeycolors ты вообще sql bro? ALTER TABLE должен запускаться без php, не включайте его в php, оставьте INSERT в начале вашего запроса. просто запустите его из phpadmin или sthg в таблице do_order. См. Ответ ниже

Cemal 15.03.2018 09:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
13
173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно сделать двумя способами.

Вы можете проверить наличие awb (идентификатор отслеживания) с помощью SELECT * FROM do_order WHERE tracking_id='puthereyourtrackingvaluefromcvs', и если количество строк для него> 0, тогда выполните UPDATE do_order SET order_id = 'PutYourNewOrderIdFromCvs' WHERE tracking_id='puthereyourtrackingvaluefromcvs'

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

ALTER TABLE do_order ADD UNIQUE (`tracking_id`);

затем в каждой вставке

$sql = "INSERT into do_order (tracking_id,order_id) values 
      ('".mysqli_real_escape_string($conn , $getData[0])."','".
          mysqli_real_escape_string($conn , $getData[1])."') 
          ON DUPLICATE KEY UPDATE order_id = '".mysqli_real_escape_string($conn , $getData[1])."'";

Важная заметка Не используйте mysqli * и даже если вам нужно, используйте подготовленные заявления

спасибо, попробовал ALTER TABLE do_order ADD UNIQUE (tracking_id);

user8444404 15.03.2018 09:39

чем я использовал это: pastebin.com/zHCH6AM7, пожалуйста, проверьте и скажите мне

user8444404 15.03.2018 09:39
ON DUPLICATE KEY SET order_id = '".mysqli_real_escape_string($conn , $getData[1])."'"; означает, что он позволит дублировать заказы?
user8444404 15.03.2018 09:42

Значит, если awb такой же, то чем он обновит столбец order_id?

user8444404 15.03.2018 09:45

но это не работает для меня ..... это не обновляет новое значение в столбце order_id .....

user8444404 15.03.2018 09:46

такое awb = идентификатор отслеживания?

Cemal 15.03.2018 10:02

Другие вопросы по теме