Foros del Web » Programando para Internet » PHP »

Insertar código generado automaticamente en todas las filas de la BD

Estas en el tema de Insertar código generado automaticamente en todas las filas de la BD en el foro de PHP en Foros del Web. Hola, he tenido que hacer un cambio en mi red y tengo que generar un ID único y fijo para cada usuario, que se quedaría ...
  #1 (permalink)  
Antiguo 21/08/2012, 09:06
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 4 meses
Puntos: 7
Insertar código generado automaticamente en todas las filas de la BD

Hola, he tenido que hacer un cambio en mi red y tengo que generar un ID único y fijo para cada usuario, que se quedaría grabado en la BD, entonces con PHP hago un bucle que genere un id y lo inserte en una fila de un usuario que no tenga y así hasta que termine con todos, sería lo más lógico pero no sé como hacerlo ni que poner exactamente en la consulta.
Espero que me puedan ayudar, gracias
  #2 (permalink)  
Antiguo 21/08/2012, 09:23
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

bueno y si pones simplemente el campo id como autoincrement , y a la hora de crear el usuario sera asignado de forma automatica.

Saludos
  #3 (permalink)  
Antiguo 21/08/2012, 09:56
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

No, no es eso lo que quiero.
Yo tengo una tabla con 60 usuarios, y he tenido que cambiar algo en mi red que requiere que cada usuario tenga un ID único aleatorio alfanumérico de 16 caracteres fijo para siempre como identificador.
Entonces yo puedo irme a phpmyadmin e introducir en la nueva columna un ID aleatorio a cada usuario manualmente pero no es plan de hacer eso 60 veces así que me gustaría que un código PHP lo hiciese.

Supongo que habrá alguna forma de hacerlo de forma sencilla, porque si no lo único que se me ocurre así hacer un SELECT a todos los nombres de usuario, meterlos en un array, y hacer un bucle while que vaya insertando el id generado a cada usuario hasta el último del array
  #4 (permalink)  
Antiguo 21/08/2012, 09:58
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 11 años, 8 meses
Puntos: 27
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

$codigo = RAND(0,60);
  #5 (permalink)  
Antiguo 21/08/2012, 15:17
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

No sé si es que me explico mal o qué pasa aquí pero estoy preguntando por el metodo para meter ese número aleatorio en la base de datos y NO cómo generar el número aleatorio
  #6 (permalink)  
Antiguo 22/08/2012, 04:56
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 11 años, 8 meses
Puntos: 27
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

sorry
mysqli_query($conexion, "INSERT INTO tubasededato(Codigo) VALUES ('RAND(0,60')");
  #7 (permalink)  
Antiguo 22/08/2012, 05:49
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

Esto de responder con lo primero que se le ocurre sin leer se va a convertir en una práctica habitual?

En fin.

Hola Adrii952,

Puedes crear un archivo solo para ese proceso, lo ejecutas y lo eliminas, pero te recomiendo hacer pruebas en otra tabla hasta que estés seguro de que el el resultado es el esperado.

Puedes hacer una consulta para tomar todas las filas de los usuarios.

Meterlos en un bucle, como al mostrar una lista.

Y dentro del bucle por cada uno, ACTUALIZAR (NO INSERT Sr. PepeF, esto crea nuevos registros, NO ACTUALIZA como solicita) con UPDATE el campo que necesitas.

Te dejo un par de enlaces donde vienen bucles y operaciones de actualización de DB's.

Bucles y Actualizar, en este último está en el título "UPDATE: Modificar registros"

Prueba y nos cuentas.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 22/08/2012, 05:58
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 11 años, 8 meses
Puntos: 27
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

No el quiero insertar en la base de dato un codigo del 0 al 60
  #9 (permalink)  
Antiguo 22/08/2012, 06:24
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

De verdad, esto de contradecir las cosas sin leer con atención es de lo mas absurdo que he visto.
Cita:
Iniciado por Adrii952 Ver Mensaje
[...]Yo tengo una tabla con 60 usuarios, y he tenido que cambiar algo en mi red que requiere que cada usuario tenga un ID único aleatorio alfanumérico de 16 caracteres[...]
[...]y hacer un bucle while que vaya insertando el id generado a cada usuario[...]
Si ya tiene los usuarios, y le quiere añadir a cada uno un id único...

Es insertar un nuevo registro?

O actualizar uno que existe?

__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #10 (permalink)  
Antiguo 22/08/2012, 06:28
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 11 años, 8 meses
Puntos: 27
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

am es verdad perdon. xD
bueno pues da igual seria asin

UPDATE usuarios SET id = 'RAND(0,60)'
  #11 (permalink)  
Antiguo 22/08/2012, 06:29
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

Gracias Uncontroled_Duck, probaré lo que me has dicho y os cuento.
Para Pepe, quizás sea yo que no me he explicado bien, ahora seré más gráfico:

Tengo esta tabla (ejemplo):

Código:
-------------------------------
| user     |     nuevo_id     |
-------------------------------
| adrii952 |                  |
| fulanito |                  |
| fulanita |                  |
| fucken   |                  |
|   ...    |       ...        |
| puten    |                  |
| blablen  |                  |
| marta    |                  |
| mario    |                  |
| paco     |                  |
-------------------------------
En dónde adrii952 es el usuario número 1
Y Paco el usuario número 61
Que en total son 60 usuarios y 60 filas, y quiero poner en la columna "nuevo_id" un id alfanumérico único de 16 caracteres para cada usuario de forma que quede así:

Código:
-------------------------------
|   user   |     nuevo_id     |
-------------------------------
| adrii952 | c4bc7296da4c051f |
| fulanito | 0c2b6dd28405cddf |
| fulanita | 75cb140d3ffbea7c |
|  fucken  | 51c4a2f232651023 |
|   ...    |       ...        |
|  puten   | 067a59e6d200a294 |
| blablen  | 5b1d7d9707443e90 |
|  marta   | 62d24c981f91ea16 |
|  mario   | 70d0ba20da9d7491 |
|  paco    | d983c4afccc70deb |
-------------------------------
..pero me da palo meterlos uno a uno así que lo que buscaba era una forma de hacerlo de forma automática con un script php

Probaré lo que dijo Uncontroled_Duck a ver si va y comento :P
  #12 (permalink)  
Antiguo 22/08/2012, 06:32
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 11 años, 8 meses
Puntos: 27
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

ok pero si utilizas esto MD5(RAND(0,60)) esto te da un codigo como el tuyo
  #13 (permalink)  
Antiguo 22/08/2012, 07:58
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

Un ejemplo rapido...

Código PHP:
Ver original
  1. //supondré que el campo tiene como propiedad ser null, de otra forma deberás cambiar NULL
  2. //por el valor por defecto que asigna MySQL al no tener valor...
  3. $query = mysql_query('SELECT id FORM usuarios WHERE codigo = NULL',$conexion) or die(mysql_error());
  4.  
  5. while($row = mysql_fetch_assoc($query)) {
  6.      //supondré que ya tienes una función o algo que te genere tu código alfanumerico de 16 dígitos...
  7.      $codigo = generar_codigo();
  8.      mysql_query('UPDATE usuarios SET codigo = "'.$codigo.'" WHERE id = '".$row['id'].'"',$conexion) or die(mysql_error());
  9. }

Obvio, es solo un EJEMPLO, deberías adaptarlo según tus necesidades y tu "configuración" actual...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #14 (permalink)  
Antiguo 22/08/2012, 10:14
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

Muuchisimas gracias, no saben lo que me va a ayudar este código para hacer cambios en mi base de datos!
Ya lo probé en la tabla de los usuarios y me actualizó las nuevas columnas en un abrir y cerrar de ojos con el código aleatorio.
¿Debería ponerla un indice UNIQUE a la columna?

Les dejo el código final que usé:

Código PHP:
<?php
//Recogemos el tiempo inicial para calcular el tiempo de ejecución del script
$tiempo_inicio microtime(true);
//Incluímos los datos de conexión a la base de datos
include("data.php");
//Nos conectamos a la base de datos
$conexion mysql_connect($servidormysql,$usuariomysql,$passmysql);
if (!
$conexion) {
    die(
'Error de conexión a la base de datos');
}
mysql_select_db($basededatos$conexion);
mysql_query ("SET NAMES 'utf8'");
//Consultamos
$query mysql_query("SELECT id_usuario FROM usuarios WHERE tag_p IS NULL",$conexion) or die(mysql_error());
$total mysql_num_rows($query);
$n 0;
//Empieza el bucle a actualizar las filas
while($row mysql_fetch_assoc($query)) {
     
$codigo substr(md5(uniqid(rand())),0,16); //Generamos el código aleatorio
     
if(!mysql_query("UPDATE usuarios SET tag_p = '".$codigo."' WHERE id_usuario = '".$row['id_usuario']."'",$conexion)) {
         die(
mysql_error());
     } else {
         
$n ++;
     }
}
//Esto solo es para informar de las filas afectadas y el tiempo de ejecución final del script
if ($n === $total) {
    echo 
$total.' filas actualizadas en '.round(microtime(true)-$tiempo_inicio,4).' segundos.';
}
?>
  #15 (permalink)  
Antiguo 22/08/2012, 10:19
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

Sería buena opción si te interesa sobre manera que el dato sea unico, la contra parte, es que necesitarás comprobar el registro, ya que si colocas como propiedad "unique" a la columna e intentas ingresar o modificar un registro con un dato existente no se ejecutará la sentencia SQL en cambio enviará un error desde MySQL por lo tanto deberás comprobar lo que retorna y saber si se inserto/actualizo correctamente...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #16 (permalink)  
Antiguo 22/08/2012, 10:27
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: Insertar código generado automaticamente en todas las filas de la BD

Perfecto, muchas gracias
Anyway, con ese código si alguna fila no se insertase correctamente se vería :P

Sabe alguien si algún moderador puede cambiar el nombre de este tema de
Insertar código generado automaticamente en todas las filas de la BD
a
Insertar código aleatorio en todas las filas de una columna en MySQL?

(e.e soy algo perfeccionista y también me gustaría que googleros encontrasen esta solución ya que yo no encontré nada ._.)

Etiquetas: automaticamente, bd, filas, todas, usuarios
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 15:07.