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

Guardar consulta en tabla sin que se repitan resultados

Estas en el tema de Guardar consulta en tabla sin que se repitan resultados en el foro de Mysql en Foros del Web. Buenas! Necesito guardar el resultado de una consulta en una tabla existente sin que se repita cada que la ejecuto; me explico.. La query es ...
  #1 (permalink)  
Antiguo 14/04/2014, 14:41
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Guardar consulta en tabla sin que se repitan resultados

Buenas!

Necesito guardar el resultado de una consulta en una tabla existente sin que se repita cada que la ejecuto; me explico..

La query es la siguiente:

Código:
SELECT Detalle1, count(Detalle1) as total from padron
group by Detalle1
ORDER BY total DESC
Que lo que hace es contar las veces que se repite un texto en una columna y mostrarme el resultado de manera descendente; por ejemplo:

TEXTO 1 - 33
TEXTO 2 - 31
TEXTO 3 - 28
TEXTO 4 - 25

Esta query necesito ejecutarla cada cierto tiempo y que se vayan actualizando las cantidades en la tabla sin que haga lo siguiente:

TEXTO 1 - 33
TEXTO 2 - 31
TEXTO 3 - 28
TEXTO 4 - 25
TEXTO 1 - 35
TEXTO 2 - 33
TEXTO 3 - 28
TEXTO 4 - 27

Alguna idea?

Mi propósito es hacer un reporte con gráficas en base a los resultados que contenga la tabla

Gracias de antemano.
  #2 (permalink)  
Antiguo 14/04/2014, 14:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar consulta en tabla sin que se repitan resultados

¿Detalle1 es la PK de la tabla?
Entonces usa REPLACE en lugar de INSERT:
Código MySQL:
Ver original
  1. REPLACE INTO tabla(Detalle1, total)
  2. SELECT Detalle1, count(Detalle1) total
  3. FROM padron
  4. GROUP BY Detalle1
De lo contrario danos más detalles de cómo haces ese insert y cómo es la estructura de la tabla destino..
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/04/2014, 15:14
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Guardar consulta en tabla sin que se repitan resultados

La tabla en la que se insertan los datos tiene la siguiente estructura:

Nombre: Operadores
Columnas: Operador(PK), Cantidad, Movilizados

La consulta que me hiciste favor de proporcionar, hace exactamente lo que necesito, pero tiene un inconveniente; la aplico de la siguiente manera:

Código:
REPLACE INTO operadores(Operador, Movilizados)
SELECT Detalle1, count(Detalle1) as total 
FROM padron
GROUP BY Detalle1
Pero a la hora de insertar los datos en "Movilizados", me borra la información que contiene la columna "Cantidad"
  #4 (permalink)  
Antiguo 14/04/2014, 16:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar consulta en tabla sin que se repitan resultados

Bueno, en ese caso no puedes hacerlo ni con INSERT ni con REPLACE:
Código MySQL:
Ver original
  1. UPDATE operadores O
  2.    INNER JOIN (SELECT Detalle1, count(Detalle1) total
  3.         FROM padron
  4.         GROUP BY Detalle1) P ON O.Operador = P.Detalle1
  5. SET O.Movilizados = (O.movilizados + P.total);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/04/2014, 16:56
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Guardar consulta en tabla sin que se repitan resultados

Interesante, pero no me inserta nada
Código MySQL:
Ver original
  1. UPDATE operadores O
  2.    INNER JOIN (SELECT Detalle1, count(Detalle1) total
  3.         FROM padron
  4.         GROUP BY Detalle1) P ON O.Operador = P.Detalle1
  5. SET O.Movilizados = (O.Movilizados + P.total);
Affected rows: 0

Última edición por gnzsoloyo; 14/04/2014 a las 18:15
  #6 (permalink)  
Antiguo 14/04/2014, 18:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Guardar consulta en tabla sin que se repitan resultados

Por supuesto que no te va a insertar nada. UPDATE no inserta, actualiza.
No puedes hacer lo que quieres en una única consulta. Tienes que hacerlo en dos:
1) Insertar.
Código SQL:
Ver original
  1. INSERT IGNORE INTO tabla(Detalle1, total)
  2. SELECT Detalle1, 0 total
  3. FROM padron
  4. GROUP BY Detalle1

2) Actualizar:
Código MySQL:
Ver original
  1. UPDATE operadores O
  2.    INNER JOIN (SELECT Detalle1, count(Detalle1) total
  3.         FROM padron
  4.         GROUP BY Detalle1) P ON O.Operador = P.Detalle1
  5. SET O.Movilizados = (O.movilizados + P.total);

El problema esencial es que no tiene mucho sentido hacer lo que quieres. Estás almacenando un campo calculado, cuando lo único que necesitas es hacer una consulta con JOIN.
Una de las primera cosas que se enseña en BBDD, es que no se guardan en tablas valores que se pueden obtener con consultas. No tiene ni utilidad ni sentido, y sólo te meten en este tipo de bretes.

¿Qué es lo que conceptualmente necesitas obtener?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/04/2014 a las 18:34

Etiquetas: resultados, select, tabla
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 07:24.