Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Pequeño script

Estas en el tema de Pequeño script en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/07/2008, 12:34
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
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
  #2 (permalink)  
Antiguo 23/07/2008, 13:00
Avatar de fhonorato  
Fecha de Ingreso: julio-2008
Ubicación: Talca, Chile
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 1
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
  #3 (permalink)  
Antiguo 23/07/2008, 13:05
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
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
  #4 (permalink)  
Antiguo 23/07/2008, 13:13
Avatar de fhonorato  
Fecha de Ingreso: julio-2008
Ubicación: Talca, Chile
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 1
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
  #5 (permalink)  
Antiguo 23/07/2008, 13:28
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
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!
  #6 (permalink)  
Antiguo 23/07/2008, 13:55
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
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."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #7 (permalink)  
Antiguo 23/07/2008, 20:17
Avatar de fhonorato  
Fecha de Ingreso: julio-2008
Ubicación: Talca, Chile
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 1
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...

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 21:42.