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

Mostrar resultados de 2 tablas sin repetición

Estas en el tema de Mostrar resultados de 2 tablas sin repetición en el foro de Mysql en Foros del Web. Estimados: Les saludo y agradezco su ayuda para este problema que para ustedes puede parecer demasiado simple pero con el que llevo ya bastante tiempo ...
  #1 (permalink)  
Antiguo 28/09/2015, 20:54
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 15 años, 11 meses
Puntos: 0
Pregunta Mostrar resultados de 2 tablas sin repetición

Estimados:

Les saludo y agradezco su ayuda para este problema que para ustedes puede parecer demasiado simple pero con el que llevo ya bastante tiempo y no encuentro solución.

Tengo 2 tablas Mysql: Ingredientes y Pedidos.

La tabla ingredientes tiene el idIngrediente y nombreIngrediente.
La tabla pedidos tiene el idPedido, idIngrediente, cantidadIngrediente y fechaPedido.

El requerimiento es:
El pedido es semanal. Cuando el usuario ingrese por primera vez (en esa semana) a la aplicacíón, se muestren todos los ingredientes en blanco. Para ello, primero valido que no haya pedido para esa fecha
Código MySQL:
Ver original
  1. SELECT p.idIngrediente, p.cantIngrediente, p.fechaPedido,
  2. i.idIngrediente, i.nombreIngrediente, i.tipoIngrediente, i.uomIngrediente, i.ordenPideIngrediente
  3.  FROM pedidos p, ingredientes i
  4. WHERE i.idIngrediente = p.idIngrediente
  5. AND i.tipoIngrediente = 1
  6.  AND p.fechaPedido = '$fecha'
Cita:
Editado: Codigo de programación no permitido en foros de BBDD. Usar Highlight "MySQL", por favor.
Si hay pedido, muestro los ingredientes con la cantidad previamente seleccionada.

En caso contrario, muestro todos los ingredientes en blanco.

Código MySQL:
Ver original
  1. SELECT * FROM ingredientes
  2.  WHERE tipoIngrediente = 1 ORDER BY nombreIngrediente, idIngrediente ASC";
El usuario puede realizar una parte del pedido, guardarlo (insert) y volver las ocasiones siguientes para actualizar el pedido.

Ahí es donde radica el problema porque no logro desplegar los resultados de ambas consultas.

Por ejemplo:

Ingrediente01 2.5 (previamente guardado)
Ingrediente02 5.0 (previamente guardado)
Ingrediente03 0.0
...

Espero haberme explicado y, si alguien me puede orientar qué es lo que debo hacer, les estaré muy agradecido.

Saludos cordiales

Última edición por gnzsoloyo; 30/09/2015 a las 09:15
  #2 (permalink)  
Antiguo 29/09/2015, 08:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Mostrar resultados de 2 tablas sin repetición

utiliza inner join, left join o right join en lugar de joins implicitos.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/09/2015, 09:07
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Mostrar resultados de 2 tablas sin repetición

Cita:
Iniciado por Libras Ver Mensaje
utiliza inner join, left join o right join en lugar de joins implicitos.......
Libras:

Muchas gracias por la respuesta. He intentado con el inner join, pero no me está arrojando los resultados que estoy esperando.

¿Tendrás algún ejemplo para adecuarlo?

Gracias de antemano.
  #4 (permalink)  
Antiguo 30/09/2015, 09:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Mostrar resultados de 2 tablas sin repetición

un ejemplo de tus datos y de lo que quieres obtener ayudaria mucho :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 30/09/2015, 12:32
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Mostrar resultados de 2 tablas sin repetición

Cita:
Iniciado por Libras Ver Mensaje
un ejemplo de tus datos y de lo que quieres obtener ayudaria mucho :)
Un ejemplo:

idIngrediente: 1
nombreIngrediente: Zanahoria
tipoIngrediente: 1
uomIngrediente: KG


idIngrediente: 2
nombreIngrediente: Aguacate
tipoIngrediente: 1
uomIngrediente: KG

idIngrediente: 3
nombreIngrediente: Sandía
tipoIngrediente: 2
uomIngrediente: KG

Al entrar la primera vez, se muestran los 3 ingredientes sin problema y se tiene un <input> para ingresar la cantidad.

El usuario puede dar clic en "Guardar Pedido" y ese pedido se inserta en la tabla pedidos de la siguiente manera:

idPedido: 1
idIngrediente: 1
cantIngrediente: 2.5
fechaPedido: 2015-10-03


idPedido: 2
idIngrediente: 2
cantIngrediente: 4.0
fechaPedido: 2015-10-03

Cuando el usuario vuelva a ingresar al sistema, la pantalla mostrará todos los ingredientes pero a los que ya están pedidos, se mostrará la información previamente ingresada. Los demás ingredientes, en blanco

Segunda vez de acceso:

Pedido para el 3 de Octubre 2015:

Zanahoria 2.5
Aguacate 4.0
Sandia 0.0
...
...


Espero haberme explicado y agradezco tu paciencia para leerme.
  #6 (permalink)  
Antiguo 30/09/2015, 13:40
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: Mostrar resultados de 2 tablas sin repetición

Comencemos por esta prueba:
Código MySQL:
Ver original
  1. SELECT i.idIngrediente, i.nombreIngrediente, i.tipoIngrediente, IFNULL(p.cantIngrediente, 0) cantIngrediente, p.fechaPedido
  2. FROM ingredientes i LEFT JOIN pedidos p ON i.idIngrediente = p.idIngrediente
  3. WHERE TRUE OR p.idIngrediente  IS NULL;
__________________
¿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 01/10/2015, 12:23
 
Fecha de Ingreso: mayo-2008
Mensajes: 38
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Mostrar resultados de 2 tablas sin repetición

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Comencemos por esta prueba:
Código MySQL:
Ver original
  1. SELECT i.idIngrediente, i.nombreIngrediente, i.tipoIngrediente, IFNULL(p.cantIngrediente, 0) cantIngrediente, p.fechaPedido
  2. FROM ingredientes i LEFT JOIN pedidos p ON i.idIngrediente = p.idIngrediente
  3. WHERE TRUE OR p.idIngrediente  IS NULL;
Gnzsoloyo:

¡Muchas gracias! El query muestra los ingredientes que ya han sido "ordenados" y los que aún no, los muestra con 0. He aprovechado para hacer un ORDER BY, quedando así:
Código MySQL:
Ver original
  1. SELECT i.idIngrediente, i.nombreIngrediente, i.tipoIngrediente, i.uomIngrediente, i.ordenPideIngrediente,
  2.     IFNULL(p.cantIngrediente, 0)
  3.     cantIngrediente, p.fechaPedido
  4.     FROM ingredientes i LEFT JOIN pedidos p ON i.idIngrediente = p.idIngrediente
  5.     WHERE TRUE OR p.idIngrediente IS NULL
  6.     ORDER BY i.tipoIngrediente, i.nombreIngrediente ASC

y, para finalizar, quiero hacer que muestre las pantallas por tipoIngrediente, pero esta parte es la que aún no encuentro cómo agregar. He puesto lo siguiente pero no arroja nada diferente
Código MySQL:
Ver original
  1. SELECT i.idIngrediente, i.nombreIngrediente, i.tipoIngrediente, i.uomIngrediente, i.ordenPideIngrediente,
  2.     IFNULL(p.cantIngrediente, 0)
  3.     cantIngrediente, p.fechaPedido
  4.     FROM ingredientes i LEFT JOIN pedidos p ON i.idIngrediente = p.idIngrediente
  5.     WHERE TRUE OR p.idIngrediente IS NULL AND[B] i.tipoIngrediente = 1[/B]
  6.     ORDER BY i.tipoIngrediente, i.nombreIngrediente ASC

Si pudieras apoyarme en esta tarea, te lo agradeceré. Si no, de cualquier forma, está excelente.

Gracias de mil formas distintas!!

Saludos Cordiales
Ulises.

Etiquetas: anidados, join, select, tablas
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 03:56.