UPDATE tabla SET a = "a", primary_key = next_autoincrement?

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Octubre 2nd, 2009, 8:57 pm

Ive consiguió una tabla de relación simple con tres columnas. La categoría A y el punto columnas id, y un auto clave principal columna de incremento que uso para hacer un seguimiento de la orden de las relaciones se hicieron.

Malos necesidad de actualizar estas relaciones de vez en cuando, cuando se elimina una categoría y los artículos son re-parar señaló. Una consulta simple que el trabajo se ve así.

SQL Código: [ Select ]
UPDATE TABLE
SET left_id = 'new_id'
WHERE left_id = 'old_id'
  1. UPDATE TABLE
  2. SET left_id = 'new_id'
  3. WHERE left_id = 'old_id'


Que saldrá de la columna intacta aunque order_id de edad y de estropear el orden de la nueva categoría.

Otra consulta que el trabajo

SQL Código: [ Select ]
INSERT INTO TABLE
SELECT 'new_id', item_id
FROM TABLE;
 
DELETE FROM TABLE WHERE category = 'old_id';
  1. INSERT INTO TABLE
  2. SELECT 'new_id', item_id
  3. FROM TABLE;
  4.  
  5. DELETE FROM TABLE WHERE category = 'old_id';


Para hacer las cosas más divertidas, quiero manejar la supresión de múltiples categorías y re-parar observando todos sus elementos a la nueva categoría misma, al mismo tiempo. El elemento de formulario para este va a ser un <select multiple/> y la re-parar ni un <select/>.

Seguro que hay algo que me dejó de actualización que order_id auto clave principal columna de incremento del valor del auto de próxima valor de incremento en una actualización?
Strong with this one, the sudo is.
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Octubre 2nd, 2009, 8:57 pm

  • UPSGuy
  • Lurker ಠ_ಠ
  • Web Master
  • Avatar de Usuario
  • Registrado: Jul 25, 2005
  • Mensajes: 2735
  • Loc: Nashville, TN
  • Status: Offline

Nota Octubre 2nd, 2009, 9:03 pm

Wouldnt un disparador más adecuadas a sus necesidades aquí que una declaración complejo?
I'd love to change the world, but they won't give me the source code.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Octubre 3rd, 2009, 5:31 am

En realidad se encontró con este "bicho" que me tenía un poco asustado de juguetear con la columna de la influenza aviar.

Im que busca en esta mesa las relaciones, la columna de la izquierda es un VARCHAR (64), derecho y orden de las columnas son columnas INT. Siendo realistas, es probable que pueda cortar la columna a la izquierda a 24 años.

Creo que en mi peor de los casos un INSERT-SELECT para generar nuevos valores order_id tendría 30 MB de memoria para almacenar los resultados de SELECT. Y que si había 1M + filas. Id tener un tiempo difícil realista ya más de 100K filas en esta operación, que tendría más cerca de 3MB. Esta es una copia de la operación final, su no va a ser algo que sucede a menudo.

Cuando veo cosas como una opción que no ha grandpare categorías de adoptar los elementos de las categorías eliminados automáticamente, simplemente bajando las filas existentes e insertar filas fresco empieza a parecer una idea demasiado malos como ser la recopilación de la cat_ids en trozos.

Heres las tres consultas Im mirando, no pre-grandpare-adopción.

PHP Código: [ Select ]
$c->categories    = default_for_in(array(), 'categories', $_POST);
$c->new_category  = default_for_in('', 'new_category', $_POST, imasks::category_id);
 
if(default_for_in(false, 'submit', $_POST))
{
   $c->sql_in  = '';
   foreach($c->categories as &$c->category)
   {
      if(preg_match(imasks::category_id, $c->category))
      {
         $c->sql_in .= ",'{$c->category}'";
      }
   }
   if($c->sql_in)
   {
      $c->sql_in  = substr($c->sql_in, 1);
      if($c->new_category)
      {
         $c->sql     = '
            INSERT IGNORE INTO ' . CAT_WP_RELATIONS_TABLE . ' (cat_id, item_id)
            SELECT "' . $db->real_escape_string($c->new_category) . '", item_id
               FROM ' . CAT_WP_RELATIONS_TABLE . "
               WHERE cat_id IN({$c->sql_in})";
         if($db->query($c->sql))
         {
            $page->messages .= new message('Added New Category/Item Relations', 'success');
         }
         else
         {
            $page->messages .= new message($db->error, 'error');
         }
      }
     
      $c->sql  = 'DELETE FROM ' . CAT_WP_RELATIONS_TABLE . " WHERE cat_id IN({$c->sql_in})";
      if($db->query($c->sql))
      {
         $page->messages .= new message('Deleted Old Category/Item Relations', 'success');
         $c->sql = 'DELETE FROM ' . CATEGORIES_TABLE . " WHERE id IN({$c->sql_in})";
         if($db->query($c->sql))
         {
            $page->messages .= new message('Deleted Categories', 'success');
         }
         else
         {
            $page->messages .= new message($db->error, 'error');
         }
      }
      else
      {
         $page->messages .= new message($db->error, 'error');
      }
      unset($c->sql, $c->sql_in);
   }
   else
   {
      $page->messages .= new message('No Categories Selected');
   }
}
  1. $c->categories    = default_for_in(array(), 'categories', $_POST);
  2. $c->new_category  = default_for_in('', 'new_category', $_POST, imasks::category_id);
  3.  
  4. if(default_for_in(false, 'submit', $_POST))
  5. {
  6.    $c->sql_in  = '';
  7.    foreach($c->categories as &$c->category)
  8.    {
  9.       if(preg_match(imasks::category_id, $c->category))
  10.       {
  11.          $c->sql_in .= ",'{$c->category}'";
  12.       }
  13.    }
  14.    if($c->sql_in)
  15.    {
  16.       $c->sql_in  = substr($c->sql_in, 1);
  17.       if($c->new_category)
  18.       {
  19.          $c->sql     = '
  20.             INSERT IGNORE INTO ' . CAT_WP_RELATIONS_TABLE . ' (cat_id, item_id)
  21.             SELECT "' . $db->real_escape_string($c->new_category) . '", item_id
  22.                FROM ' . CAT_WP_RELATIONS_TABLE . "
  23.                WHERE cat_id IN({$c->sql_in})";
  24.          if($db->query($c->sql))
  25.          {
  26.             $page->messages .= new message('Added New Category/Item Relations', 'success');
  27.          }
  28.          else
  29.          {
  30.             $page->messages .= new message($db->error, 'error');
  31.          }
  32.       }
  33.      
  34.       $c->sql  = 'DELETE FROM ' . CAT_WP_RELATIONS_TABLE . " WHERE cat_id IN({$c->sql_in})";
  35.       if($db->query($c->sql))
  36.       {
  37.          $page->messages .= new message('Deleted Old Category/Item Relations', 'success');
  38.          $c->sql = 'DELETE FROM ' . CATEGORIES_TABLE . " WHERE id IN({$c->sql_in})";
  39.          if($db->query($c->sql))
  40.          {
  41.             $page->messages .= new message('Deleted Categories', 'success');
  42.          }
  43.          else
  44.          {
  45.             $page->messages .= new message($db->error, 'error');
  46.          }
  47.       }
  48.       else
  49.       {
  50.          $page->messages .= new message($db->error, 'error');
  51.       }
  52.       unset($c->sql, $c->sql_in);
  53.    }
  54.    else
  55.    {
  56.       $page->messages .= new message('No Categories Selected');
  57.    }
  58. }
Strong with this one, the sudo is.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 208 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC