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

Realizar consulta limitada

Estas en el tema de Realizar consulta limitada en el foro de Mysql en Foros del Web. Tengo dos tablas: MAESTRO llave_maestro int(11) fecha datetime DETALLE llave int(11) descripcion varchar(80) llave_maestro int(11) (Este campo es la relación a la tabla MAESTRO) MAESTRO: ...
  #1 (permalink)  
Antiguo 17/06/2012, 07:08
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 10 meses
Puntos: 21
Realizar consulta limitada

Tengo dos tablas:

MAESTRO
llave_maestro int(11)
fecha datetime

DETALLE
llave int(11)
descripcion varchar(80)
llave_maestro int(11) (Este campo es la relación a la tabla MAESTRO)

MAESTRO:
Llave / Fecha
1 / 2012-07-15 12:12:12
2 / 2012-07-15 12:13:10

DETALLE:
Llave / Descripción / Maestro
1 / Descripcion 1 / 1
2 / Descripcion 4 / 1
3 / Descripcion 3 / 1
4 / Descripcion 7 / 1
5 / Descripcion 8 / 1
6 / Descripcion 1 / 2
7 / Descripcion 3 / 2
8 / Descripcion 6 / 2


Deseo una consulta que incluya el renglón más grande de MAESTRO, en este caso el de valor "2", y su DETALLE correspondiente (color verde)

NOTA: El diseño de las tablas es más complejo de lo que muestro y lo he tratado de representar de manera simplificada, lo comento porque quizá alguien pueda sugerir reestructurar las tablas o la consulta. Anticipo que ello no es posible, la consulta se debe realizar según se expresa.

Puedo consultar con lo siguiente:

$consulta = mysql_query("SELECT mae.fecha, det.descripcion
FROM maestro mae
LEFT JOIN detalle det on det.llave_maestro=det.llave

pero esta consulta muestra la totalidad de registros. Deseo mostrar solo el DETALLE de los registros correspondientes al último registro de MAESTRO, en este caso es "2" (VERDE).

Por lo pronto, lo he resuelto haciendo dos consultas. En la primer consulta obtengo el útimo registro de MAESTRO, y la segunda es algo así:
WHERE llave_maestro = '$llave'

LO QUE DESEO: En una misma consulta indicar que de MAESTRO solo considere el último registro, algo asi como LIMIT 1 para MAESTRO, pero a DETALLE le incluya todos los registros ¿Acaso esto es posible? Imagino que debe ser posible.

Espero haberme explicado.

Gracias
  #2 (permalink)  
Antiguo 17/06/2012, 09:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Realizar consulta limitada

Para empezar:
Código MySQL:
Ver original
  1. SELECT mae.fecha, det.descripcion
  2. FROM maestro mae INNER JOIN detalle det ON det.llave_maestro=det.llave
  3. WHERE det.llave_maestro = 2
LEFTO JOIN se usa únicamente si quieres que te devuelva todo el contenido de la primera tabla del FROM, tenga o no coincidencias con la segunda tabla. Pero si lo que quieres es sólo lo que coincida, corresponde INNER JOIN.
__________________
¿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 17/06/2012, 09:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Realizar consulta limitada

Quizás buscas una subconsulta como esta. No la he probado.
Código MySQL:
Ver original
  1. SELECT d.llave_maestro, d.descripcion, d.maestro, m.fecha
  2.  FROM detalle d
  3.  INNER JOIN maestro m ON d.llave_maestro = m.llave_maestro
  4.  WHERE d.llave_maestro = (SELECT llave_maestro
  5.                  FROM detalle ORDER BY llave_maestro DESC LIMIT 1)
[/HIGHLIGHT]
  #4 (permalink)  
Antiguo 17/06/2012, 10:13
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 10 meses
Puntos: 21
Respuesta: Realizar consulta limitada

Cita:
Iniciado por jurena Ver Mensaje
Quizás buscas una subconsulta como esta. No la he probado.
Código MySQL:
Ver original
  1. SELECT d.llave_maestro, d.descripcion, d.maestro, m.fecha
  2.  FROM detalle d
  3.  INNER JOIN maestro m ON d.llave_maestro = m.llave_maestro
  4.  WHERE d.llave_maestro = (SELECT llave_maestro
  5.                  FROM detalle ORDER BY llave_maestro DESC LIMIT 1)
[/HIGHLIGHT]
Hola jurena,

Muchas gracias, es exacto lo que buscaba. Ignoraba que pudiera crear selet´s anidados. En vista a ello, ahora solo ponerme a trabajar y resolver en base a tu sugerencia.

Cada vez me maravillo más de MySQL

Gracias a gnzsoloyo, ha sido también útil tu comentario.

NOTA: Las instrucciones las escribí "al vuelo", ignoro si funcionen, fue para expresar la idea.

Gracias por todo.

Etiquetas: join, limitada, registros, select, sql, tabla, campos
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 18:42.