¿Cómo hago para que, al crear registros, este campo se rellene al azar?
Gracias, un saludo
|
|
#2 (permalink) |
![]() Fecha de Ingreso: marzo-2008
Mensajes: 439
|
Re: Campo contraseña
Esto te generara un numero aleatorio, a partir de aqui puedes hacer lo que quieras....
Quim De la ayuda de MySQL
Cita:
RAND(), RAND(N)
Returns a random floating-point value v in the range 0 <= v < 1.0. If a constant integer argument N is specified, it is used as the seed value, which produces a repeatable sequence of column values. mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 mysql> SELECT RAND(); -> 0.70100469486881 mysql> SELECT RAND(20); -> 0.15888261251047 The effect of using a non-constant argument is undefined. As of MySQL 5.0.13, non-constant arguments are disallowed. To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i). For example, to obtain a random integer in the range the range 7 <= R < 12, you could use the following statement: SELECT FLOOR(7 + (RAND() * 5)); You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. However, you can retrieve rows in random order like this: mysql> SELECT * FROM tbl_name ORDER BY RAND(); ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows: mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000; Note that RAND() in a WHERE clause is re-evaluated every time the WHERE is executed. RAND() is not meant to be a perfect random generator, but instead is a fast way to generate ad hoc random numbers which is portable between platforms for the same MySQL version. |
|
|
|
|
|
#3 (permalink) |
![]() Fecha de Ingreso: abril-2008
Mensajes: 34
|
Re: Campo contraseña
Ok, entonces si quiero que se rellene ese campo automaticamente al crear un registro, con un valor de 6 cifras.
Debería poner en valor predeterminado esto: FLOOR(100000 + RAND() * (999999 – 100000) Correcto?. |
|
|
|
|
|
#7 (permalink) |
![]() Fecha de Ingreso: abril-2008
Mensajes: 34
|
Re: Campo contraseña
Perdona, es que no habia probado nada parecido. No consigo que me salga, he probado con un update para modificar el de los registros que ya tengo almacenados y tambien me sale lo que he escrito en vez de un número.
Tambien he probado con insert into y pasa lo mismo. Gracias por tu ayuda |
|
|
|
|
|
#9 (permalink) |
![]() Fecha de Ingreso: abril-2008
Mensajes: 34
|
Re: Campo contraseña
He probado estas dos cosas
update alumnos set password='FLOOR(100000 + RAND() * (999999 – 100000))' where password<'100000' (ahora mismo registros tienen numeros del 1 al 30 que puse manualmente) Tambien sin comas: update alumnos set password=FLOOR(100000 + RAND() * (999999 – 100000)) where password<'100000' (así da error) Y: insert into alumnos(password) FLOOR(100000 + RAND() * (999999 – 100000)) insert into alumnos(password) values('FLOOR(100000 + RAND() * (999999 – 100000))') insert into alumnos(password) values(FLOOR(100000 + RAND() * (999999 – 100000))) Todo eso he probado más o menos jeje |
|
|
|
|
|
#10 (permalink) |
![]() Fecha de Ingreso: marzo-2008
Mensajes: 439
|
Re: Campo contraseña
De entrada simplifica 999999 – 100000=899999.
Esta tarde puedo mirar me lo con mysql ahora no. Pero, password es varchar por tanto espera un texto mira que funcion te puede convertir el resultado de FLOOR(...) a texto y no pongas comas... Luego te digo algo... Quim |
|
|
|
|
|
#12 (permalink) |
![]() Fecha de Ingreso: marzo-2008
Mensajes: 439
|
Re: Campo contraseña
Tanto una como la otra me han funcionado a la perfección te paso todo el script:
Código:
Errores que tenias, no encerrabas los nombres de los campos entre " ` " (password ademas creo que tiene algun significado especial, pero bueno con el delimitador no le molesta) y esto 999999 – 100000 me daba error, asi no 999999-100000.DROP TABLE IF EXISTS `forum`.`users`;
CREATE TABLE `forum`.`users` (
`iduser` int(11) NOT NULL auto_increment,
`password` varchar(6) default NULL,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`iduser`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into users(`password`,`name`)
values(FLOOR(100000 + RAND() * 899999),'quim');
insert into users(`name`)
values('Ziyad');
update users set `password`=FLOOR(100000 + RAND() * (999999-100000))
where `password` is null;
Yo uso MySql 5.0.45-community-nt-log Quim |
|
|
|
![]() |
| Herramientas | |
| Desplegado | |
|
|