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

Como se puede evitar sacar registros repetidos en consulta

Estas en el tema de Como se puede evitar sacar registros repetidos en consulta en el foro de Mysql en Foros del Web. Buen dia mi problema es el siguiente estoy sacando unos anuncios desde la base de datos con la siguiente consula @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver ...
  #1 (permalink)  
Antiguo 13/07/2011, 11:25
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Como se puede evitar sacar registros repetidos en consulta

Buen dia mi problema es el siguiente estoy sacando unos anuncios desde la base de datos con la siguiente consula
Código MySQL:
Ver original
  1. SELECT anuncios.idEstado, perfiles.nombre as nombrePerfil, anuncios.idEstado, categorias.nombre, anuncios.idAnuncio, anuncios.idCategoria, anuncios.titulo, anuncios.idCliente , COUNT(galeriaclientes.idGC) AS totAnuncios FROM anuncios INNER JOIN usuarioclientes ON (anuncios.idCliente=usuarioclientes.idCliente) INNER JOIN perfiles ON (usuarioclientes.idPerfil=perfiles.idPerfil) INNER JOIN categorias ON (anuncios.idCategoria=categorias.idCategoria) LEFT OUTER JOIN galeriasanuncios ON (anuncios.idAnuncio=galeriasanuncios.idAnuncio) LEFT OUTER JOIN galeriaclientes ON (galeriasanuncios.idGaleriaCliente=galeriaclientes.idGC) WHERE (anuncios.idCategoria = 10) AND (anuncios.idEstado = 3) AND (perfiles.idPerfil =65) GROUP BY anuncios.idEstado, perfiles.nombre, anuncios.idEstado, categorias.nombre, anuncios.idAnuncio, anuncios.idCategoria, anuncios.titulo ORDER BY RAND() LIMIT 7
me arroja Bien los datos pero quiero que no se repita el idCliente la idea es hacer un RAND( ) de anuncios pero de distintos clientes espero aberme esplicado bien y que algen me pueda echar una ayuda de ante mano gracias:

idEstado|nombrePerfil |nombre |idAnuncio |idCategoria | titulo | idCliente | totAnuncios

3 Cuenta Gold Maquinaria 229 10 Tractor 129 1
3 Cuenta Gold Maquinaria 224 10 Podadora 128 1
3 Cuenta Gold Maquinaria 750 10 Asientos 675 0
3 Cuenta Gold Maquinaria 227 10 Camion 129 1
3 Cuenta Gold Maquinaria 226 10 Moto 128 1
  #2 (permalink)  
Antiguo 13/07/2011, 11:54
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: Como se puede evitar sacar registros repetidos en consulta

Pruebalo así:
Código MySQL:
Ver original
  1.     (SELECT
  2.         A.idEstado,
  3.         P.nombre nombrePerfil,
  4.         A.idEstado,
  5.         C.nombre,
  6.         A.idAnuncio,
  7.         A.idCategoria,
  8.         A.titulo,
  9.         A.idCliente ,
  10.         COUNT(galeriaclientes.idGC) AS totAnuncios
  11.     FROM
  12.         anuncios A
  13.         INNER JOIN
  14.         usuarioclientes UC ON (A.idCliente=UC.idCliente)
  15.         INNER JOIN
  16.         perfiles P ON (UC.idPerfil=perfiles.idPerfil)
  17.         INNER JOIN
  18.         categorias C ON (A.idCategoria=C.idCategoria)
  19.         LEFT OUTER JOIN
  20.         galeriasanuncios GA ON (A.idAnuncio=GA.idAnuncio)
  21.         LEFT OUTER JOIN
  22.         galeriaclientes GC ON (GA.idGaleriaCliente=GC.idGC)
  23.     WHERE
  24.         (A.idCategoria = 10)
  25.         AND
  26.         (A.idEstado = 3)
  27.         AND
  28.         (P.idPerfil =65)
  29.     ORDER BY RAND()) T1
  30.     A.idCliente
__________________
¿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 13/07/2011, 12:45
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Como se puede evitar sacar registros repetidos en consulta

Gracias por responder gnzsoloyo prove yme arroja el siguiente error :
"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM
(SELECT
A.idEstado,
P.nombre nombrePerfil,
' at line 1

"
  #4 (permalink)  
Antiguo 13/07/2011, 13:10
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: Como se puede evitar sacar registros repetidos en consulta

Revisa que hayas copiado bien la consulta porque el revisor de sintaxis del Workbench no encuentra ninguna falla, y si reviso línea a linea tampoco. Verifica que tengas 34 lineas en esta consulta.
Si persiste, puede ser un problema de interfaz, de lenguaje o bien de version de MySQL.
__________________
¿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 13/07/2011, 13:56
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Como se puede evitar sacar registros repetidos en consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Revisa que hayas copiado bien la consulta porque el revisor de sintaxis del Workbench no encuentra ninguna falla, y si reviso línea a linea tampoco. Verifica que tengas 34 lineas en esta consulta.
Si persiste, puede ser un problema de interfaz, de lenguaje o bien de version de MySQL.
ya revise bien y lo que pasa es que avia una columda que estaba repetida que era idEstado = que COUNT(galeriaclientes.idGC) tamvien me mostraba error y al final quedo asi =
"
SELECT *
FROM (


SELECT A.idEstado,
P.nombre nombrePerfil,
GC.idGC,
C.nombre,
A.idAnuncio,
A.idCategoria,
A.titulo,
A.idCliente,
COUNT( GC.idGC ) AS totAnuncios
FROM anuncios A
INNER JOIN usuarioclientes UC ON ( A.idCliente = UC.idCliente )
INNER JOIN perfiles P ON ( UC.idPerfil = P.idPerfil )
INNER JOIN categorias C ON ( A.idCategoria = C.idCategoria )
LEFT OUTER JOIN galeriasanuncios GA ON ( A.idAnuncio = GA.idAnuncio )
LEFT OUTER JOIN galeriaclientes GC ON ( GA.idGaleriaCliente = GC.idGC )
WHERE (
A.idCategoria =10
)
AND (
A.idEstado =3
)
AND (
P.idPerfil =65
)
ORDER BY RAND( )
)T1
GROUP BY A.idCliente
LIMIT 7
ahora me manda el sigiente error:"#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

"
"
  #6 (permalink)  
Antiguo 13/07/2011, 14:00
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: Como se puede evitar sacar registros repetidos en consulta

OK, hay que sacar ese campo y mandarlo afuera:
Código MySQL:
Ver original
  1. SELECT T1.*, COUNT(idGC) AS totAnuncios
  2.     (SELECT
  3.         A.idEstado,
  4.         P.nombre nombrePerfil,
  5.         A.idEstado,
  6.         C.nombre,
  7.         A.idAnuncio,
  8.         A.idCategoria,
  9.         A.titulo,
  10.         A.idCliente ,
  11.         GC.idGC
  12.     FROM
  13.         anuncios A
  14.         INNER JOIN
  15.         usuarioclientes UC ON (A.idCliente=UC.idCliente)
  16.         INNER JOIN
  17.         perfiles P ON (UC.idPerfil=perfiles.idPerfil)
  18.         INNER JOIN
  19.         categorias C ON (A.idCategoria=C.idCategoria)
  20.         LEFT OUTER JOIN
  21.         galeriasanuncios GA ON (A.idAnuncio=GA.idAnuncio)
  22.         LEFT OUTER JOIN
  23.         galeriaclientes GC ON (GA.idGaleriaCliente=GC.idGC)
  24.     WHERE
  25.         (A.idCategoria = 10)
  26.         AND
  27.         (A.idEstado = 3)
  28.         AND
  29.         (P.idPerfil =65)
  30.     ORDER BY RAND()) T1
  31.     A.idCliente
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 13/07/2011, 14:11
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Como se puede evitar sacar registros repetidos en consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK, hay que sacar ese campo y mandarlo afuera:
Código MySQL:
Ver original
  1. SELECT T1.*, COUNT(idGC) AS totAnuncios
  2.     (SELECT
  3.         A.idEstado,
  4.         P.nombre nombrePerfil,
  5.         A.idEstado,
  6.         C.nombre,
  7.         A.idAnuncio,
  8.         A.idCategoria,
  9.         A.titulo,
  10.         A.idCliente ,
  11.         GC.idGC
  12.     FROM
  13.         anuncios A
  14.         INNER JOIN
  15.         usuarioclientes UC ON (A.idCliente=UC.idCliente)
  16.         INNER JOIN
  17.         perfiles P ON (UC.idPerfil=perfiles.idPerfil)
  18.         INNER JOIN
  19.         categorias C ON (A.idCategoria=C.idCategoria)
  20.         LEFT OUTER JOIN
  21.         galeriasanuncios GA ON (A.idAnuncio=GA.idAnuncio)
  22.         LEFT OUTER JOIN
  23.         galeriaclientes GC ON (GA.idGaleriaCliente=GC.idGC)
  24.     WHERE
  25.         (A.idCategoria = 10)
  26.         AND
  27.         (A.idEstado = 3)
  28.         AND
  29.         (P.idPerfil =65)
  30.     ORDER BY RAND()) T1
  31.     A.idCliente
Gracias gnzsoloyo por la ayuda mira ahora me da el siguiente error "#1054 - Unknown column 'A.idCliente' in 'group statement'" no me reconoce la columna A.idCliente en el GROUP BY;
  #8 (permalink)  
Antiguo 13/07/2011, 16:14
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: Como se puede evitar sacar registros repetidos en consulta

Trata de analizar tu mismo los errores, así aprenderás mejor...
Algunas cosas son demasiado simples, como esta, donde el problema es que lo que había que eliminar era el alias invocado... algo que se volvía bastante evidente desde el momento en que "A" era el alias dentro de la subconsulta y no fuera de ella. Si te fijas, en el SELECT exterior, los campos se invocan con "T1", porque ése es el alias de la subconsulta, y lo que hice fue mover el GROUP BY fuera para evitar el error anterior, con lo que se generó el problema.

Código MySQL:
Ver original
  1. SELECT T1.*, COUNT(idGC) AS totAnuncios
  2.     (SELECT
  3.         A.idEstado,
  4.         P.nombre nombrePerfil,
  5.         A.idEstado,
  6.         C.nombre,
  7.         A.idAnuncio,
  8.         A.idCategoria,
  9.         A.titulo,
  10.         A.idCliente ,
  11.         GC.idGC
  12.     FROM
  13.         anuncios A
  14.         INNER JOIN
  15.         usuarioclientes UC ON (A.idCliente=UC.idCliente)
  16.         INNER JOIN
  17.         perfiles P ON (UC.idPerfil=perfiles.idPerfil)
  18.         INNER JOIN
  19.         categorias C ON (A.idCategoria=C.idCategoria)
  20.         LEFT OUTER JOIN
  21.         galeriasanuncios GA ON (A.idAnuncio=GA.idAnuncio)
  22.         LEFT OUTER JOIN
  23.         galeriaclientes GC ON (GA.idGaleriaCliente=GC.idGC)
  24.     WHERE
  25.         (A.idCategoria = 10)
  26.         AND
  27.         (A.idEstado = 3)
  28.         AND
  29.         (P.idPerfil =65)
  30.     ORDER BY RAND()) T1
  31.     idCliente

La cosa es que trates de revisar tu mismo. Es la mejor forma de aprender.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join, registros, repetidos, select
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:47.