Foros del Web » Programando para Internet » PHP »

Actualizar varios campos de una tabla de manera incremental

Estas en el tema de Actualizar varios campos de una tabla de manera incremental en el foro de PHP en Foros del Web. Hola amigas/os, verán tengo un problema a ver si me pueden ayudar. Estoy intentando, sin exito, poder actualizar con el "update" de mysql, un mismo ...
  #1 (permalink)  
Antiguo 08/05/2020, 03:03
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 5
Actualizar varios campos de una tabla de manera incremental

Hola amigas/os, verán tengo un problema a ver si me pueden ayudar.

Estoy intentando, sin exito, poder actualizar con el "update" de mysql, un mismo campo

que está en varias filas de una misma tabla es decir algo asi:

tabla llamada accesos:

campo_id, campo_numero_acceso

El campo llamado "campo_numero_acceso", debe ser incremetal, es decir

en la primera fila de la tabla debe valer 1, en la segunda fila de la tabla 2, .....etc

pero el código que tengo no me funciona bien, ya que me rellena el campo "campo_numero_acceso" en todas las filas con el mismo valor osea 5 en vez de rellenarmelos con:
1
2
3
4
5

Miren este es el código que tengo:

Código PHP:
Ver original
  1. for ($i=1; $i <= 5; $i++)
  2.  
  3.     {
  4.                 $sql = "UPDATE accesos SET numero_acceso=$i";
  5.  
  6.         mysqli_query($con,$sql) or die (mysqli_error($con));
  7.     }

Gracias de antemano.
  #2 (permalink)  
Antiguo 08/05/2020, 09:50
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años, 6 meses
Puntos: 120
Respuesta: Actualizar varios campos de una tabla de manera incremental

Cita:
Iniciado por mensajeescrito Ver Mensaje
Hola amigas/os, verán tengo un problema a ver si me pueden ayudar.

Estoy intentando, sin exito, poder actualizar con el "update" de mysql, un mismo campo

que está en varias filas de una misma tabla es decir algo asi:

tabla llamada accesos:

campo_id, campo_numero_acceso

El campo llamado "campo_numero_acceso", debe ser incremetal, es decir

en la primera fila de la tabla debe valer 1, en la segunda fila de la tabla 2, .....etc

pero el código que tengo no me funciona bien, ya que me rellena el campo "campo_numero_acceso" en todas las filas con el mismo valor osea 5 en vez de rellenarmelos con:
1
2
3
4
5

Miren este es el código que tengo:

Código PHP:
Ver original
  1. for ($i=1; $i <= 5; $i++)
  2.  
  3.     {
  4.                 $sql = "UPDATE accesos SET numero_acceso=$i";
  5.  
  6.         mysqli_query($con,$sql) or die (mysqli_error($con));
  7.     }

Gracias de antemano.
eso deberia hacerse al crear la FILA NO AL HACER UN UPDATE, pero bueno tendras tus razones, hacerlo solo con el Comando UPDATE no te valdra, por lo que te tocara hacerlo desde un BUCLE SQL o un BUCLE PHP, tu eliges, si es algo que haras constantemente o solo para reparar, si fuese constantemente lo mas LOGICO seria que crees un STORED PROCEDURE en MYSQL con los parametros y criterios necesarios y con ello estaria listo

ahora del modo PHP, el UPDATE trabaja bajo criterios, y no estas dando ningun criterio o filtro a tu UPDATE por eso esta poniendo a todos los que coinciden el mismo valor

Código PHP:
$sql "UPDATE accesos SET numero_acceso=$i WHERE id=1" 
$sql "UPDATE accesos SET numero_acceso=$i WHERE id=2" 
$sql "UPDATE accesos SET numero_acceso=$i WHERE id=3" 
y lo mejor seria que hagas un SELECT primero y con ese select Obtienes el ID de cada

Código psuedocodigo:
Ver original
  1. var $i = 1;
  2. for ($fila in sql->fetchAll('SELECT * FROM accessos '))
  3.  
  4. {
  5.       $sql = "UPDATE accesos SET numero_acceso=$i WHERE id=" . $fila['id'];
  6.  
  7.       sql->execute($con,$sql) or die (mysqli_error($con));
  8.       $i++;
  9. }
espero puedas comprender la logica
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 08/05/2020, 10:15
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.139
Antigüedad: 13 años, 8 meses
Puntos: 171
Respuesta: Actualizar varios campos de una tabla de manera incremental

Lo que te dicen arriba.. estas trabajando sin criterio, se actualizado todo...

la primera pasada, todos se hacen 1, despues 2, 3.... y al ser la ultima 5, todos son 5 al final cuando revisas...
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #4 (permalink)  
Antiguo 08/05/2020, 12:43
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Actualizar varios campos de una tabla de manera incremental

Podrías eliminar el campo y volver a crearlo, pero esta vez de forma auto-incremental. Primero:

Código MySQL:
Ver original
  1. ALTER TABLE accesos DROP numero_acceso

Y luego:

Código MySQL:
Ver original 
  #5 (permalink)  
Antiguo 13/05/2020, 03:58
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: Actualizar varios campos de una tabla de manera incremental

Hola, lo primero de todo agradecer a todos por vuestras ayudas.

Decir que ya he encontrado la solución, razón por la cual mi tardanza en responder.

Paso a explicar:

Son varias filas con un campo en cada una de ellas llamado "numero_acceso".

debo utilizar el update de sql , por que en mi caso si borro alguna fila, el resto de filas deben reenumerarse es decir si tengo

1
2
3
y borro el 2

quedaría
1
3

pero con este código que os voy a poner que es la solución, quedaría
1
2

Una vez dicho esto pongo el código:

Código PHP:
Ver original
  1. // Conecto con la bd
  2.         $con = $this->ConectarBbdd();
  3.  
  4.  
  5. // Selecciono los ids de cada una de las filas
  6.         $sql_ficheros = "SELECT id FROM tabla_accesos_ficheros";
  7.  
  8.         $res_accesos = mysqli_query($con,$sql_ficheros) or die ('Lo siento no se han mostrado los datos.' . mysqli_error($con));
  9.  
  10.  
  11. // Mediante dos bucles anidados, el primer foreach servirá para obtener las keys(claves) de dicho bucle que servirán para usarlas como los números ordenados que necesito para cada uno de los accesos
  12.  
  13.         foreach($res_accesos as $nums_accesos=>$accesos)
  14.  
  15.             {
  16.  
  17. // Este segundo foreach servirá para obtener los ids de cada una de las filas
  18.  
  19. // para crear la sentencia update de sql
  20.  
  21.                 foreach ($accesos as $id)
  22.  
  23.                     {
  24. // La siguiente linea suma 1, ya que un array , el primer valor, su key (clave), vale cero.
  25.  
  26. // Y claro las id en una tabla empiezan por uno y no por cero. por eso se suma 1.
  27.  
  28.                         $incremento_nums_accesos = ($nums_accesos+1);
  29.  
  30.  
  31. // La siguiente linea es para colocar 2 ceros delante del "numero de acceso", ya que el numero de acceso debe tener 3 digitos, por ejemplo si el numero de acceso es 5, pues quedaría 005.
  32.  
  33.                         $formato_nums_accesos = str_pad($incremento_nums_accesos, 3, "00", STR_PAD_LEFT);  
  34.  
  35.  
  36. // Y aquí estaría la sentencia update sql, que actualiza cada campo de cada fila de manera 001,002,003,004,005
  37. //y que si borro por ejemplo 003 , se actualizaría quedando así:
  38.  
  39. //001,002,003,004
  40.  
  41.                         $sql = "UPDATE tabla_accesos_ficheros SET numero_acceso='".$formato_nums_accesos."' WHERE id=".$id;
  42.  
  43.  
  44.                         mysqli_query($con,$sql) or die (mysqli_error($con));
  45.                     }
  46.             }

Espero que se entienda bien y que sirva a quien necesite algo parecido a esto.

Si pudieran decirme, comentarme que les parece el código, se los agradecería mucho.

Un cordial saludo a todos.

Etiquetas: campos, incremental, manera, mysqli, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:38.