Tengo un campo en una tabla, que va a actuar como contraseña para el logueo en la página web.
¿Cómo hago para que, al crear registros, este campo se rellene al azar?
Gracias, un saludo
| |||
Campo contraseña Tengo un campo en una tabla, que va a actuar como contraseña para el logueo en la página web. ¿Cómo hago para que, al crear registros, este campo se rellene al azar? Gracias, un saludo |
| |||
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. |
| |||
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?. |
| |||
Re: Campo contraseña No... tienes que ponerlo en la sentencia INSERT INTO donde iria el valor del campo. Tambien se podria hacer con un trigger... tu mismo. Quim Última edición por quimfv; 15/05/2008 a las 02:48 |
| |||
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 |
| |||
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 |
| |||
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 |
| |||
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 |