Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 23-jul-2008, 12:34   #1 (permalink)
satsu ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Pregunta 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
satsu está desconectado   Responder Citando
Antiguo 23-jul-2008, 13:00   #2 (permalink)
fhonorato no se puede cailificar en este momento
 
Fecha de Ingreso: julio-2008
Ubicación: Talca, Chile
Mensajes: 33
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
fhonorato está desconectado   Responder Citando
Antiguo 23-jul-2008, 13:05   #3 (permalink)
satsu ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 3
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
satsu está desconectado   Responder Citando
Antiguo 23-jul-2008, 13:13   #4 (permalink)
fhonorato no se puede cailificar en este momento
 
Fecha de Ingreso: julio-2008
Ubicación: Talca, Chile
Mensajes: 33
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
fhonorato está desconectado   Responder Citando
Antiguo 23-jul-2008, 13:28   #5 (permalink)
satsu ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 3
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

Gracias!
satsu está desconectado   Responder Citando
Antiguo 23-jul-2008, 13:55   #6 (permalink)
Genetix tiene algunos puntos positivos de karma
 
Avatar de Genetix
 
Fecha de Ingreso: noviembre-2002
Ubicación: LP
Mensajes: 1.032
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
__________________
"El conocimiento nos hace responsables."
blog personal http://codigolinea.com
Genetix está desconectado   Responder Citando
Antiguo 23-jul-2008, 20:17   #7 (permalink)
fhonorato no se puede cailificar en este momento
 
Fecha de Ingreso: julio-2008
Ubicación: Talca, Chile
Mensajes: 33
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...

fhonorato está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 14:16.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93