Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   Pequeño script (http://www.forosdelweb.com/f86/pequeno-script-608683/)

satsu 23/07/2008 12:34

Pequeño script
 
Hola,

Quiero desarrollar un pequeño script en php para automatizar una serie de consultas en sql, y no se muy bien como hacerlo.

Voy a poner una tabla de ejemplo para que se entienda mejor. La tabla es coche y tiene los siguientes campos:

- idcoche --> autonumérico
- codigoCoche --> se calcula mediante una función random y debe ser único por cada coche
- marcaCoche

El problema es que hay coches con un mismo código, y quiero obtener el idCoche de los coches que tengan los mismos valores en el campo código.

He realizado la siguiente consulta mysql:

SELECT idCoche, count(*) as contador FROM coches GROUP BY idCoche

Una vez obtengo el resultado de esta consulta, quiero hacer un update de la tabla de la siguiente forma:

Si el contador es mayor que 1 --> ejecuta el update.

El problema que tengo es que con un simple if, tengo que ejecutar el script tantas veces como códigos con valores repetidos haya. Y quiero hacer el update de golpe.
He probado con for, while, do while... pero no hay forma.

Alguien me ayuda?

Muchas gracias

fhonorato 23/07/2008 13:00

Respuesta: Pequeño script
 
usa en el while la condicion de que contador no sea mayor a 1 , osea contador <= 1... ahi deberia funcionar...

lo otro útil.. es poner al campo codigocoche como un campo UNICO entonces no te dejara ingresar codigos repetidos.. si haces esto debes enfocar el script a que si te genera error al ingresar, te genere un nuevo codigocoche y asi hasta lograrlo.. quizas se te haga mas facil el iterar. Suerte :D

satsu 23/07/2008 13:05

Respuesta: Pequeño script
 
Gracias por tu respuesta.

Pero... el while tiene que ser contador > 1, creo. Ya que la primera consulta me devuelve contador mayor que 1 para aquellos coches con codigo repetido. Esa opción ya lo probé y no funciono.

En cuanto a poner que codigo sea unico, también es una solución. Pero como esto no era así,hubo un error en el desarrollo de la aplicación que genera los códigos y ahora se ha de arreglar de alguna forma.

Gracias de nuevo

fhonorato 23/07/2008 13:13

Respuesta: Pequeño script
 
y si pones HAVING count(*) > 1 al final de:

SELECT idCoche, count(*) as contador FROM coches GROUP BY idCoche

y a los que te le haces UPDATE, cada vez que hagas un update aumentas en uno un auxiliar que inicias en 0;

tonces hace un while que mientras el auxiliar sea distinto de cero se actualize ..

no se si me explique bien, pero eso del auxiliar o flag sirve :D

satsu 23/07/2008 13:28

Respuesta: Pequeño script
 
He probado lo del having y me retorna solo aquellos que el contador sea maro que uno. Guay! :)

Pero... no entiendo la segunda parte de tu respuesta :pensando:

Gracias!

Genetix 23/07/2008 13:55

Respuesta: Pequeño script
 
Si deseas hacer un update de todos los campos puedes usar el comando REPLACE que te permite insertar si no existe el valor y actualizar si el dato existe

Saludos

fhonorato 23/07/2008 20:17

Respuesta: Pequeño script
 
imaginemos esta tabla:
Código PHP:

idcoche codigo marca 
1    aaaa    ford
2    aaaa    nissan
3    cccc    hyundai
4    dddd    ford 

lo que quieres es buscar que se cambie el codigo de idcoche 2 por otro...

la sentencia:

SELECT `idcoche` , count( * ) AS contador
FROM coches
GROUP BY `codigo`

eso arroja:

Código PHP:

idcoche     contador 
1        2
3        1
4        1 

entonces trabajas en idcoche=1 y le cambias el codigo....


en eso estamos claro... ahora ... lo que te digo es que uses un auxiliar asi:

Código PHP:


// una vez lista la conexion
$aux 0;

while(
$aux == 0){
        
$sel mysql_query("SELECT `idcoche` , count( * ) AS contador FROM coches GROUP BY `codigo`");
        
$aux 0;
        while( 
$datos mysql_fetch_array($sel) ){
                if(
$datos[contador] > 1){
                         
// aqui el update

                         // luego aumentas el aux
                         
$aux++;

                 } 
        } 

algo asi .. ahi tu colocas lo que te falte... se ejecutara tantas veces como codigos repetidos...

:si:


La zona horaria es GMT -6. Ahora son las 07:43.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.