elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Problema con una consulta no funciona Distinct
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con una consulta no funciona Distinct  (Leído 6,783 veces)
Marciano_79

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Problema con una consulta no funciona Distinct
« en: 3 Abril 2016, 02:28 am »

Hola a todos, favor chicos.. estoy hace un mes tratando de poder solucionar una consulta que me está entregando registros duplicados, en algunos casos hasta triplicados… trabajo con MySqli y la verdad es que he probado de tantas formas que ya no se que más hacer... no soy programador, por ello si me explico mal favor tener paciencia vale? estas son mis tablas..

Tabla categoria:
IDCATEGORIA
NOMBRE_CATEGORIA

Tabla galerias:
IDGALERIAS
TITULO
DESCRIPCION
FECHA_ALTA
NOMBRECATEGORIA
FKCATEGORIA_ID

mi codigo:

Código:
if( isset( $_GET['cat'] ) ){  
   $id = $_GET['cat'];
        $consulta ="SELECT DISTINCT
  IDGALERIA,
  TITULO,
  DESCRIPCION,
  NOMBRECATEGORIA,
  FKCATEGORIA_ID,
  DATE_FORMAT( FECHA_ALTA, '%d/%m/%Y' ) AS FECHA_ALTA,
  IDCATEGORIA,
  NOMBRE_CATEGORIA  

FROM galerias a INNER JOIN categoria b ON a.NOMBRECATEGORIA='$id'";
       

$filas = mysqli_query($cnx, $consulta);
$columna = mysqli_fetch_assoc($filas);
echo "<h1>Galerías $columna[NOMBRECATEGORIA]</h1>";
    
}

dejo una imagen del resultado devuelto actualmente.. la tabla que se ve en rojo es lo que obtengo y la que esta en azul es lo que realmente quiero que se visualice..



Esto es el resultado de la categoría retrato, pero ocurre también en las distintas otras categorías que tengo, moda, infantiles etc… todas entregan el mismo resultado... Porfavor alguien amable me pueda ayudar.. de ante mano muchas gracias.!!


« Última modificación: 4 Abril 2016, 00:51 am por Marciano_79 » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.413



Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #1 en: 3 Abril 2016, 02:33 am »

Código:
SELECT DISTINCT (IDGALERIA)


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Marciano_79

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #2 en: 3 Abril 2016, 02:41 am »

no funciona amigo, todo queda igual..  :(
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.413



Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #3 en: 3 Abril 2016, 05:27 am »

ya que estás usando join lo recomendable es usar el formato tabla.campo no es necesario que redeclares como a y b, hazlo directo

Código
  1. SELECT DISTINCT
  2.                  (galerias.IDGALERIA),
  3.                  galerias.TITULO,
  4.                  galerias.DESCRIPCION,
  5.                  categoria.NOMBRECATEGORIA,
  6.                  categoria.FKCATEGORIA_ID,
  7.                  DATE_FORMAT( galerias.FECHA_ALTA, '%d/%m/%Y' ) AS galeria.FECHA_ALTA,
  8.                  categoria.IDCATEGORIA,
  9.                  categoria.NOMBRE_CATEGORIA  
  10.  
  11.               FROM galerias INNER JOIN categoria ON galerias.NOMBRECATEGORIA=catgoria.'$id'

o como sea tu orden


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Marciano_79

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #4 en: 3 Abril 2016, 05:56 am »

Gracias por tu tiempo y disponibilidad, pero la verdad esto no quiere funcionar, probé así como me dices y nada..  

Código:
"SELECT DISTINCT  
 (galerias.IDGALERIA),
  galerias.TITULO,
  galerias.DESCRIPCION,
  galerias.NOMBRECATEGORIA,
  galerias.FKCATEGORIA_ID,
  DATE_FORMAT( galerias.FECHA_ALTA, '%d/%m/%Y' ) AS galerias.FECHA_ALTA,
  categoria.IDCATEGORIA,
  categoria.NOMBRE_CATEGORIA  

FROM galerias INNER JOIN categoria ON galerias.NOMBRECATEGORIA=categoria.'$id'";

me sale esto: Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\prueba\galeria-fotografica.php on line 54

sinceramente me tiene mal la situación... que crees que pueda hacer? Gracias por tu ayuda..
« Última modificación: 3 Abril 2016, 06:05 am por Marciano_79 » En línea

Marciano_79

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #5 en: 3 Abril 2016, 21:46 pm »

cambiando la consulta o forma seria opción?
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #6 en: 4 Abril 2016, 12:04 pm »

Deberías enlazar correctamente las dos tablas en la consulta ¿no?

IDCATEGORIA <-> FKCATEGORIA_ID
En línea

- Nice to see you again -
MinusFour
Moderador Global
***
Conectado Conectado

Mensajes: 5.114


I'm fourth.


Ver Perfil WWW
Re: Problema con una consulta no funciona Distinct
« Respuesta #7 en: 4 Abril 2016, 16:50 pm »

Por lo general unes las columnas con ON y dejas las restricciones en WHERE pero esto puede funcionar. Claro que no debería ser:

Código
  1. ... ON galerias.NOMBRECATEGORIA=categoria.'$id'

Sino:

Código
  1. ... ON galerias.NOMBRECATEGORIA='$id'

No es necesario usar nombres de tabla en este caso porque no hay una ambigüedad en las tablas (o vistas parciales), si tuvieras tablas con campos que usan el mismo nombre entonces si necesitas especificar el nombre con la tabla (aunque en mi opinión es más claro ver de donde salen los campos en la consulta).

El alias de la función DATE_FORMAT no necesita especificarse un campo de la tabla:

Código
  1. DATE_FORMAT( galerias.FECHA_ALTA, '%d/%m/%Y' ) AS FECHA_ALTA

DISTINCT no es una función (no es necesario los paréntesis).

En fin, nada de esto explica porque obtuviste esos resultados anteriormente, la consulta que muestras debería regresar esas hileras para los campos que aparecen en tu documento de excel, pero en tu documento no estás mostrando los valores de las otras columnas (son 8 columnas las que seleccionas en tu consulta, tu documento de excel solo muestra 5).
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: Problema con una consulta no funciona Distinct
« Respuesta #8 en: 4 Abril 2016, 21:23 pm »

Para mi, el que los campos que indiqué no estén enlazados en la consulta, si explica los resultados "erróneos" obtenidos. ¿Cómo sabe el motor qué registros de una y otra tabla extraer, si ambas no están enlazadas en la query en cuestión?

En este caso concreto, sabe que tiene que extraer los registros de la tabla galerias por:

Código
  1. ON galerias.NOMBRECATEGORIA='$id'

pero no de la tabla categoria (y entiendo que por tanto sacará todos los registros de la misma. De ahí la repetición de los mismos).

Justo lo contrario sucedería si en vez del ON anterior, fuese:

Código
  1. ON categoria.NOMBRE_CATEGORIA='$id'

extraería los registros correctos de la tabla categoría y todos los registros de la tabla galerías.

Por tanto, consultas tales como:

Código
  1. SELECT
  2.       DISTINCT  galerias.IDGALERIA,
  3.       galerias.TITULO,
  4.       galerias.DESCRIPCION,
  5.       galerias.NOMBRECATEGORIA,
  6.       galerias.FKCATEGORIA_ID,
  7.       DATE_FORMAT( galerias.FECHA_ALTA, '%d/%m/%Y' ),
  8.       categoria.IDCATEGORIA,
  9.       categoria.NOMBRE_CATEGORIA
  10. FROM
  11.      galerias INNER JOIN categoria ON galerias.NOMBRECATEGORIA = categoria.NOMBRE_CATEGORIA  
  12.      AND galerias.NOMBRECATEGORIA = '$id';
  13.  

Código
  1. SELECT
  2.       DISTINCT  galerias.IDGALERIA,
  3.       galerias.TITULO,
  4.       galerias.DESCRIPCION,
  5.       galerias.NOMBRECATEGORIA,
  6.       galerias.FKCATEGORIA_ID,
  7.       DATE_FORMAT( galerias.FECHA_ALTA, '%d/%m/%Y' ),
  8.       categoria.IDCATEGORIA,
  9.       categoria.NOMBRE_CATEGORIA
  10. FROM
  11.        galerias INNER JOIN categoria ON galerias.NOMBRECATEGORIA = categoria.NOMBRE_CATEGORIA
  12. WHERE
  13.        galerias.NOMBRECATEGORIA = '$id';
  14.  

Código
  1. SELECT
  2.       DISTINCT  galerias.IDGALERIA,
  3.       galerias.TITULO,
  4.       galerias.DESCRIPCION,
  5.       galerias.NOMBRECATEGORIA,
  6.       galerias.FKCATEGORIA_ID,
  7.       DATE_FORMAT( galerias.FECHA_ALTA, '%d/%m/%Y' ),
  8.       categoria.IDCATEGORIA,
  9.       categoria.NOMBRE_CATEGORIA
  10. FROM
  11.       galerias, categoria
  12. WHERE
  13.       galerias.NOMBRECATEGORIA = categoria.NOMBRE_CATEGORIA  
  14.       AND galerias.NOMBRECATEGORIA = '$id';
  15.  

y equivalentes, mostrarán los resultados deseados.

En línea

- Nice to see you again -
MinusFour
Moderador Global
***
Conectado Conectado

Mensajes: 5.114


I'm fourth.


Ver Perfil WWW
Re: Problema con una consulta no funciona Distinct
« Respuesta #9 en: 4 Abril 2016, 21:55 pm »

Ah cierto, de la primera forma se realiza un producto cruzado entre $id y todos las hileras de categoria, aunque en su ejemplo solo tiene una categoría al parecer. También deberías poder hacer:

Código
  1.    ON galerias.NOMBRECATEGORIA = '$id' AND categoria.NOMBRE_CATEGORIA = '$id'

Aunque en mi opinión es mejor si vas por la segunda proposición de HdM.

Esto todavía no explica porque tienes registros duplicados en tus resultados. Si tu tienes resultados tal cuales lo has mostrado en tu imagen, no deberías tener resultados duplicados.

DISTINCT opera sobre las hileras de tus resultados. Supongamos que tienes 2 tablas A y B con un solo campo.

Código:

 A | B
--------
 1 | 2
   | 3
   | 4
   | 5
   | 6

Si tu haces:

Código
  1. SELECT * FROM A INNER JOIN B -- INNER JOIN se vuelve CROSS JOIN

Acabas con una tabla asi:

Código:
-------
|1 | 2|
-------
|1 | 3|
-------
|1 | 4|
-------
|1 | 5|
-------
|1 | 6|
-------

Si tu usas DISTINCT aquí, acabarás con la misma tabla, porque cada uno de los registros de la tabla es único. Si tuvieras una tabla así:


Código:

 A | B
--------
 1 | 1
   | 1
   | 1
   | 1
   | 1

E hicieras la misma consulta tendrías:

Código:
-------
|1 | 1|
-------
|1 | 1|
-------
|1 | 1|
-------
|1 | 1|
-------
|1 | 1|
-------

Si usarás DISTINCT para los resultados de esta consulta acabarías con:

Código:
-------
|1 | 1|
-------

Por eso mismo dije que lo mencionado hasta ahorita no explica el resultado de tu tabla, porque los resultados que muestras son idénticos y reducibles por DISTINCT. La única forma para la cual tendrías estos valores duplicados sería que los otros valores de las columnas que no muestras son diferentes.

Por ejemplo, veo ahí un campo IDGALERIA que no estoy seguro si sea o no único. Si el campo es un identificador que se auto incrementa por cada registro seleccionar ese campo va a producir que cada hilera sea diferente (por ende DISTINCT no los descarta).
« Última modificación: 4 Abril 2016, 22:35 pm por MinusFour » En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo hacer esta consulta en MySql: Select distinct...
Bases de Datos
orion180 2 6,901 Último mensaje 21 Septiembre 2011, 20:10 pm
por fran800m
SELECT DISTINCT, IN ()
Programación Visual Basic
TheGhost(Z) 8 2,077 Último mensaje 21 Noviembre 2006, 20:30 pm
por TheGhost(Z)
DISTINCT SQL
Programación Visual Basic
TheGhost(Z) 5 1,318 Último mensaje 16 Julio 2007, 02:52 am
por Sancho.Mazorka
Ayuda SQL DISTINCT « 1 2 3 »
Bases de Datos
TheGhost(Z) 23 15,253 Último mensaje 26 Octubre 2009, 21:34 pm
por ^Tifa^
Consulta Distinct a un solo campo « 1 2 »
Bases de Datos
matagalo 10 10,677 Último mensaje 11 Junio 2012, 22:33 pm
por Aberroncho
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines