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

Pregunta simple sobre DISTINC

Estas en el tema de Pregunta simple sobre DISTINC en el foro de Mysql en Foros del Web. Buenas tengo una duda que seguro es una tonteria pero estoy intentandolo y no consigo lo que quiero. Quiero que me muestre todos los campos ...
  #1 (permalink)  
Antiguo 09/05/2009, 10:12
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Pregunta simple sobre DISTINC

Buenas tengo una duda que seguro es una tonteria pero estoy intentandolo y no consigo lo que quiero.

Quiero que me muestre todos los campos pero con el campo nombre sin repetir. Algo así como:

SELECT * DISTINCT nombre FROM tabla...

Pero claro, esa consulta no me funciona.

Gracias!!
  #2 (permalink)  
Antiguo 09/05/2009, 10:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Pregunta simple sobre DISTINC

select * from tabla group by nombre
Te mostrará sólo una vez el nombre y el primer registro que lo tiene.

Select distinct nombre from tabla te mostrará los distintos nombres, pero
select distinct nombre, otro campo FROM tabla te mostrará todos los registros donde la cadena nombre+otrocampo sean distintas. Por eso, cuando hay más de un campo, hay que recurrir al GROUP BY.
  #3 (permalink)  
Antiguo 09/05/2009, 12:11
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Pregunta simple sobre DISTINC

Buenas Jurena, gracias por responder, sí me funciona. Pero me ha surgido otra duda sobre la misma sentencia. Quiero que los registros me los muestre aleatoriamente pero quiero que el GROUP BY me muestre el último registro insertado cuando tengan el mismo nombre, en vez de el primero.

Pero el ORDER BY DESC lo tengo usandolo con el RAND, y no puedo usar ahora el ORDER BY num_registro. No se si me he explicado muy bien... Lo tengo así:

GROUP BY nombre ORDER BY RAND() DESC LIMIT 5

En resumen quiero que me muestre en vez de el primero que encuentre, el último.

num_registro es un campo numérico que se incrementa por cada registro nuevo.

Gracias de nuevo
  #4 (permalink)  
Antiguo 09/05/2009, 13:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Pregunta simple sobre DISTINC

imagino que tienes una versión de MySQL 4.1 o posterior, que te permita subconsultas. Si es así, prueba esto (adapta los nombres de los campos y tabla a los tuyos):

Código sql:
Ver original
  1. SELECT tabla.nombre, tabla.numregistro FROM tabla INNER JOIN
  2.   (SELECT nombre, MAX(numregistro) maximo
  3.     FROM tabla GROUP BY nombre)t1
  4.       ON tabla.nombre = t1.nombre AND t1.maximo = tabla.numregistro
  #5 (permalink)  
Antiguo 10/05/2009, 18:33
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Pregunta simple sobre DISTINC

Hola Jurena, gracias por tu tiempo, pero no he conseguido que funcione, así es como lo he cambiado:

Cita:
"SELECT peliculas.nombre, peliculas.registro FROM peliculas INNER JOIN
(SELECT nombre, MAX(registro) maximo
FROM peliculas GROUP BY (nombre) t1
ON peliculas.nombre = t1.nombre AND t1.maximo = peliculas.registro)"
Pero me da este error:
mysql_fetch_row(): supplied argument is not a valid MySQL result resource.

Lo que me saca de mis casillas es por qué el GROUP BY muestra el registro más antiguo... y yo quiero el más nuevo...

No se puede GROUP BY nombre, registro DESC ?¿?¿?¿

Última edición por manolo_manolo; 10/05/2009 a las 18:44
  #6 (permalink)  
Antiguo 10/05/2009, 18:44
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Pregunta simple sobre DISTINC

Para intentar hacerlo más facil he optado por tirar el ORDER BY RAND() a tomar por cul... y así es como he dejado la consulta fácil:

Cita:
"SELECT * FROM peliculas WHERE genero='".$genero."' AND nombre_web!='".$nombre_web."' GROUP BY nombre_web ORDER BY registro DESC LIMIT 5"
Pero aún así el ORDER BY registro DESC se lo pasa por el forro!!
  #7 (permalink)  
Antiguo 10/05/2009, 23:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Pregunta simple sobre DISTINC

mira qué versión de MySQL tienes. Escribe esto
show version()
Y otra cosa, haz la prueba directamente en la consola o en PHPMyAdmin de la consulta sin las comillas propias de PhP, como la escribiste, pero con los nombres de tus campos. Primero veamos ahí. No te rindas ahora. La respuesta mysql_fetch_row(): supplied argument is not a valid MySQL result resource es PHP y te indica que no encuentra nada con esa consulta, pero puede deberse a varias cosas. Y piensa que mysql_fetch_row carga un array con índice numérico.

Pon los nombres de los campos de tus dos tablas y dinos la versión de MysQL que usas.

La versión debe ser 4.1 o posterior para hacer subconsultas.

Primero, prueba la consulta MySQL en consola o en PHPMyAdmin, luego cuando veas los datos bien, pasaremos al PHP en el foro PHP, si es que fuera necesario.

Última edición por jurena; 10/05/2009 a las 23:59
  #8 (permalink)  
Antiguo 11/05/2009, 05:12
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Pregunta simple sobre DISTINC

Hola Jurena, gracias por la paciencia. La version que me pone es:

Versión del servidor: 5.0.45
Versión del cliente: 5.0.45

Y he ejecutado la sentencia en la consola de phpmyadmin y me ha dado este error:

Cita:
#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 't1 ON peliculas.nombre = t1.nombre AND t1.maximo = peliculas.registro)
LIMIT 0,' at line 1
Gracias otra vez por tu ayuda
  #9 (permalink)  
Antiguo 11/05/2009, 06:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Pregunta simple sobre DISTINC

Entonces tiene solución, no te preocupes (si es el MySQL del servidor, claro). Ponme los nombres de todos los campos de tus dos o tres tablas implicadas y volveremos a intentar ofrecerte una sintaxis correcta.
De todas formas, prueba esta antes:
SELECT peliculas.nombre, peliculas.registro FROM peliculas INNER JOIN
(SELECT nombre, MAX(registro) maximo
FROM peliculas GROUP BY nombre) t1
ON peliculas.nombre = t1.nombre AND t1.maximo = peliculas.registro

Creo que el paréntesis antes de nombre era el problema, y también el del final, que sobraba.
Y si finalmente quieres un orden aleatorio de los resultados

SELECT peliculas.nombre, peliculas.registro FROM peliculas INNER JOIN
(SELECT nombre, MAX(registro) maximo
FROM peliculas GROUP BY nombre) t1
ON peliculas.nombre = t1.nombre AND t1.maximo = peliculas.registro ORDER BY RAND()

Última edición por jurena; 11/05/2009 a las 08:21
  #10 (permalink)  
Antiguo 11/05/2009, 08:51
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Pregunta simple sobre DISTINC

Dios Jurena, me funciona perfecto!! Eres un crack!!!!!!

Y pude ponerlo en aleatorio también!!

Mil gracias tío!! Sí señor!!
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 06:49.