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

MySQL : mostrar ultimos registros de cada categoria

Estas en el tema de MySQL : mostrar ultimos registros de cada categoria en el foro de Mysql en Foros del Web. Hola Necesito una manito, yo se que es sencillo pero no le atino Tengo una tabla "nombres" con los campos : "id", "nombres", "apellidos", "categoria" ...
  #1 (permalink)  
Antiguo 16/06/2005, 17:48
 
Fecha de Ingreso: junio-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 101
Antigüedad: 20 años, 10 meses
Puntos: 1
MySQL : mostrar ultimos registros de cada categoria

Hola

Necesito una manito, yo se que es sencillo pero no le atino

Tengo una tabla "nombres" con los campos : "id", "nombres", "apellidos", "categoria"

con la siguiente sentencia :

SELECT * FROM nombres GROUP BY categoria;

los muestra muy bien, sino no fuera que muestra el primer registro de cada categoria y lo que se necesita es que muestre es el ultimo registro.

se agradece cualquier ayuda
__________________
@cesars
indexante.com
  #2 (permalink)  
Antiguo 16/06/2005, 18:47
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
siempre crei que la sentencia "select" devolvia un conjunto no ordenado de registros. el orden de este conjunto puede variar dependiendo de la version de la base de datos o de la base de datos.

por ejemplo, si se te ocurriese migrar esta base de datos a otra como maxDB, por ejemplo, nadie te asegura que el orden vaya a ser el mismo.

sin embargo en esta sentencia si tiene sentido hablar del ultimo elemento:
Código:
select * from nombres group by categoria ORDER BY id
ya que en este caso se trata de un conjunto ordenados de registros.

si quieres obtener el ultimo:
Código:
select * from nombres group by categoria ORDER BY id DESC
y te quedas con el primero.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #3 (permalink)  
Antiguo 17/06/2005, 08:43
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
con el limit podes definir cuantos ultimos queres..

por ejemplo "select * from empleados order by Id desc limit 5"

serian los ultimos 5

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #4 (permalink)  
Antiguo 17/06/2005, 08:50
 
Fecha de Ingreso: junio-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 101
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola

gracias por responder :)

La sentencia que me sugieres :

select * from nombres group by categoria ORDER BY id DESC

solo ordena todos los resultados por "id" , la idea es que muestre el ultimo de cada categoria, te doy un ejemplo, tengo la BD con los siguientes datos:

"id", "nombres", "apellidos", "categoria"
1, Pepe, Perez, 8
2, Juan, Garcia, 8
3, Cesar, Sanchez, 5

Actualmente con la siguiente sentencia :

SELECT * FROM nombres GROUP BY categoria;

me muestra :

1, Pepe, Perez, 8
3, Cesar, Sanchez, 5

y con la que me sentencia que me sugieres :

select * from nombres group by categoria ORDER BY id DESC

muestra :

3, Cesar, Sanchez, 5
1, Pepe, Perez, 8

y el objetivo es obtener un resultado como :

2, Juan, Garcia, 8
3, Cesar, Sanchez, 5

como ves, el ultimo (el que tiene el mayor "id") de cada categoria es el q debe mostrarse.

Lo he estado intentando tambien (usando HAVING y ORDER BY), a ver si me pueden dar una mano.

Saludos
__________________
@cesars
indexante.com
  #5 (permalink)  
Antiguo 12/01/2006, 17:09
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola CesarS:

Sé que este es un post antigüito, pero tengo el mismo problema y no le he encontrado respuesta.
¿Al fin lograste resolverlo? Si es así, podrías postear cómo?

Gracias y feliz año nuevo
  #6 (permalink)  
Antiguo 14/01/2006, 00:26
Avatar de txus35  
Fecha de Ingreso: mayo-2005
Mensajes: 42
Antigüedad: 18 años, 11 meses
Puntos: 0
Prueba ésto. Es una subconsulta y, si trabajas con MySQL, sólo funcionará con versiones 4.1.X

"SELECT *
FROM Nombres
WHERE Categoria=(
SELECT MAX(Categoria) FROM Nombres
LIMIT 1 GROUP BY Categoria)
ORDER BY id DESC"


Espero que te sirva. Si alguien conoce alguna solución a este problema sin usar subconsultas, por favor, me lo postee.
Salu2 patós.
  #7 (permalink)  
Antiguo 14/01/2006, 10:05
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola Txus35:

Gracias por tu respuesta. Desafortunadamente ando en MySQL 4.0.23, a menos de una versión de poder usar subconsultas, jajaja!!!

¿Alguien sabe cómo hacer esto sin recurrir a subconsultas?

Saludos.
  #8 (permalink)  
Antiguo 28/01/2006, 05:04
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Escoffie
No se con que lenguaje de programacion estas haciendo tu aplicación, pero yo tuve una vez en un proyecto de la escuela un problema con las subconsultas y es que en los ordenadores de clase la version de mysql no las soportaba.

De manera que con PHP (el lenguaje que usaba para la aplicación) simulé la subconsulta que mysql no me permitia.
La cosa esta hacer la subconsulta
(en el ejemplo que te han dado SELECT MAX(Categoria) FROM Nombres
LIMIT 1 GROUP BY Categoria)
como una consulta normal y guardar ese resultado en una variable.
Luego realizamos la otra consulta de la siguiente manera :
SELECT *
FROM Nombres WHERE Categoria=$var
ORDER BY id DESC


Es solo un ejemplo, no se si lo que yo te escrito te devolverá lo que quieres, deberás modificar lo pertinente para conseguir lo que quieres.
Quizás debas usar un bucle dentro de otro (uno para cada consulta).
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 04:52.