Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zaktualizuj tabelę skrzyżowań o nowe wartości

Wiem, że to stare, ale znalezienie odpowiedzi zajęło mi trochę czasu, a to pytanie zajmuje wysoką pozycję w Google.

Znalazłem następujący kod i zmodyfikowałem go:

INSERT IGNORE INTO my_table VALUES (1,1), (1,2), (1,3);

DELETE FROM my_table WHERE c1 NOT IN (1,2,3) AND my_table = 1;

Pochodzenie kodu źródłowego:http://borzacchiello.it/how-to -aktualizacja-tabeli-połączeń/



Mój kod, który zmodyfikowałem do używania ze zmiennymi PHP i pętlami PDO:

    $a_id = $my_main_id //this would be c1 in the above question

    //Set Variable From Post
    $var_1 = isset($_POST['var_1']) ? $_POST['var_1'] : '';
    $var_2 = isset($_POST['var_2']) ? $_POST['var_2'] : '';
    //etc, etc, etc

    //put variables into array
    $data = array('var_1'=>$var_1, 'var_2'=>$var_2, 'var_3'=>$var_3, 'var_4'=>$var_4, 'tarp_5'=>$tarp_5);

                       //get count of variable that contain data and not empty
                       $data_array_count = 0;
                       foreach ($data as $column => $value) {     
                                if($value != '') {
                                    $data_array_count = ++$data_array_count;
                                }
                       }

                       //if contains atleast one variable run update code     
                       if($data_array_count != 0) {

                            //loops through and inserts each varible in array
                            foreach ($data as $column => $value) {

                                //ignores variables without any data
                                if($value != '') {  
                                    $insert = $db->prepare("INSERT IGNORE my_table (a_id, b_id) VALUES (:a_id, :b_id)"); 
                                    $insert->execute(array(':a_id' => $a_id,
                                                           ':b_id' => $value ));        
                                }
                            }


                                //sets up variables in array to remove any records that need to be deleted
                                $columns = "";  
                                $holders = "";  
                                foreach ($data as $column => $value) {     
                                    if($value != '') {      
                                       $columns .= ($columns == "") ? "" : ", ";  
                                       $columns .= $column;  
                                       $holders .= ($holders == "") ? "" : ", ";  
                                       $holders .= ":$column";  
                                    }
                                }


                                $delete = $db->prepare("DELETE FROM my_table WHERE accessory_id NOT IN ($holders) AND (carrier_id = :a_id)"); 

                            //bind value for main id     
                            $delete->bindValue(":a_id", $a_id);

                            //loop to bind value for each variable stored in array with data
                            foreach($data as $placeholder => $value) {
                                if($value != '') {
                               $delete->bindValue(":" . $placeholder, $value);
                                }
                            }

                            $delete->execute();      

                    } 


Używając przykładu z oryginalnego pytania, musiałbyś uruchomić ten kod dla każdego c1 numer identyfikacyjny, który chciałeś zaktualizować (c1 byłby odpowiednikiem $a_id w moim przykładzie).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL JSON łączy dwa klucze podstawowe obiektów json w dokumencie JSON

  2. com.mchange.v2.resourcepool.CannotAcquireResourceException:ResourcePool nie może pozyskać zasobu z jego podstawowej fabryki lub źródła

  3. Zapytanie o aktywne rekordy w Railsach pobiera najczęściej używane obiekty

  4. Uzyskać wynik zapytania w jednym wierszu?

  5. PHP PDOException:SQLSTATE[HY093]:Nieprawidłowy numer parametru