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

wymiana partii na dla CodeIgniter Active Record

Jeśli chcesz sklonować moje repozytorium Wdrożyłem. Próbowałem aby uzyskać rozwiązanie w głównej gałęzi, ale wydaje się, że narfbg jest zdecydowanie przeciwny. Być może większy udział społeczności mógłby go wdrożyć.

/**
 * Replace_Batch
 *
 * Compiles batch insert strings replacing any existing rows and runs the queries
 *
 * @param   string  $table  Table to replace insert into
 * @param   array   $set    An associative array of insert values
 * @param   bool    $escape Whether to escape values and identifiers
 * @return  int Number of rows inserted or FALSE on failure
 */
public function replace_batch($table, $set = NULL, $escape = NULL, $batch_size = 100)
{
    if ($set === NULL)
    {
        if (empty($this->qb_set))
        {
            return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE;
        }
    }
    else
    {
        if (empty($set))
        {
            return ($this->db_debug) ? $this->display_error('replace_batch() called with no data') : FALSE;
        }

        $this->set_insert_batch($set, '', $escape);
    }

    if (strlen($table) === 0)
    {
        if ( ! isset($this->qb_from[0]))
        {
            return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE;
        }

        $table = $this->qb_from[0];
    }

    // Batch this baby
    $affected_rows = 0;
    for ($i = 0, $total = count($this->qb_set); $i < $total; $i += $batch_size)
    {
        if ($this->query($this->_replace_batch($this->protect_identifiers($table, TRUE, $escape, FALSE), $this->qb_keys, array_slice($this->qb_set, $i, $batch_size))))
        {
            $affected_rows += $this->affected_rows();
        }
    }

    $this->_reset_write();
    return $affected_rows;
}

// --------------------------------------------------------------------

/**
 * Replace batch statement
 *
 * Generates a platform-specific insert string from the supplied data.
 *
 * @param   string  $table  Table name
 * @param   array   $keys   INSERT keys
 * @param   array   $values INSERT values
 * @return  string
 */
protected function _replace_batch($table, $keys, $values)
{
    return 'REPLACE INTO '.$table.' ('.implode(', ', $keys).') VALUES '.implode(', ', $values);
}

Powyżej znajduje się dokładnie ten sam kod, co na Github, aby rozwiązanie można było indeksować z powrotem do stackoverflow.com. Ale niestety moja odpowiedź na stackoverflow jest ograniczona do 30k znaków, więc nie mogę wkleić całego commita, który obejmuje również zmiany w sterownikach db.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Parametryzacja skryptu SQL

  2. MySql:Wybierz elementy, które mają wszystkie wartości

  3. sesja logowania zniszczona po odświeżeniu

  4. Pozwól, aby liczba zaczynała się od ZERA, gdy jest przechowywana w polu mysql integer

  5. Zapytanie SQL:lista wszystkich identyfikatorów, które były aktywne w określonym przedziale czasu, posortowane według czasu rozpoczęcia