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

Consulta MYSQL

Estas en el tema de Consulta MYSQL en el foro de Mysql en Foros del Web. Buenas tardes amigos como están?? tengo la siguiente duda, espero puedan ayudarme...... este es el caso.... supongamos que tengo 3 tablas orden, detalle_de_orden y producto ...
  #1 (permalink)  
Antiguo 17/02/2014, 12:44
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 13 años
Puntos: 0
Exclamación Consulta MYSQL

Buenas tardes amigos como están??

tengo la siguiente duda, espero puedan ayudarme......

este es el caso....

supongamos que tengo 3 tablas orden, detalle_de_orden y producto

para unirlas debería ser mas o menos así

Código:
SELECT orden.*,detalle_de_orden.*, producto.* FROM orden,detalle_de_orden,producto WHERE detalle_de_orden.id_orden=orden.id_orden AND detalle_de_orden.id_producto=producto.id_producto
hasta aqui todo bien, ahora imaginemos que producto tiene un estado y ese estado tiene 3, "articulo_ok, repuesto_ok, articulo_o_repuesto_no_aprobado"

ahora imaginemos que existe una orden de id=1 al unirlas con las demas tablas muestra las siguientes tablas:

id_orden id_producto estado
1 3 articulo_ok
1 5 articulo_ok
1 10 repuesto_ok
1 12 articulo_o_repuesto_no_aprobado

ahora el problema que tengo es el siguiente, lo que necesito es que si de esta consulta q muestra los datos anteriores haya alguno que tenga el estado 'articulo_ok o repuesto_ok' me muestre en una sola fila que existe una orden que cumple con los requisitos de los estados mencionado anteriormente... algo así

id_orden fecha
1 '11-12-2014'


*me debería mostrar solo eso, mas los datos de la orden como fecha etc,*porque se cumplieron las expectativas de los estado que eran o articulo_ok o repuesto_ok

pero si dentro de esos registros apareciera algún estado 'articulo_o_repuesto_no_aprobado' no deberia mostrar nada...... el tema es que he tratado de algunas formas pero no funciona como quiero


espero me puedan ayudar desde ya muchas gracias, saludos
  #2 (permalink)  
Antiguo 18/02/2014, 03:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta MYSQL

Esta es la sintaxis que se recomienda
Código MySQL:
Ver original
  1. SELECT orden.*,
  2.              detalle_de_orden.*,
  3.              producto.*
  4. FROM orden INNER JOIN detalle_de_orden ON detalle_de_orden.id_orden=orden.id_orden
  5.                     INNER JOIN producto ON detalle_de_orden.id_producto=producto.id_producto;

No acabo de entender lo que quieres pero te doy opciones

Código MySQL:
Ver original
  1. SELECT DISTINCT detalle_de_orden.id_orden
  2. FROM detalle_de_orden INNER JOIN producto
  3.      ON detalle_de_orden.id_producto=producto.id_producto
  4. WHERE producto.estado="articulo_ok" OR producto.estado="repuesto_ok";
Esto da los id de las ordenes con productos en articulo_ok o repuesto_ok


Código MySQL:
Ver original
  1. SELECT DISTINCT detalle_de_orden.id_orden
  2. FROM detalle_de_orden INNER JOIN producto
  3.      ON detalle_de_orden.id_producto=producto.id_producto
  4. WHERE producto.estado="articulo_o_repuesto_no_aprobado";
Esto da los id de ordenes con productos en "articulo_o_repuesto_no_aprobado"


Código MySQL:
Ver original
  1. SELECT orden.id_orden,orden.fecha
  2. FROM orden LEFT JOIN
  3. (SELECT DISTINCT detalle_de_orden.id_orden
  4. FROM detalle_de_orden INNER JOIN producto
  5.      ON detalle_de_orden.id_producto=producto.id_producto
  6. WHERE producto.estado="articulo_o_repuesto_no_aprobado") Sbc
  7.          ON orden.id_orden=Sbc.id_orden
  8. WHERE Sbc.id_orden IS NULL

Esto da id y fecha de las ordenes que no tienen ningun producto en "articulo_o_repuesto_no_aprobado"

Si no es esto intenta entender lo que he hecho y adaptalo a tus necesidades.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/02/2014, 05:47
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 13 años
Puntos: 0
Exclamación Respuesta: Consulta MYSQL

gracias por responder, a continuación voy a postear algo que casi funciona, quizás puedas ayudarme.

Código HTML:

SELECT IF(count(estado_del_producto_en_tabla_detalle)=(select count(estado_del_producto_en_tabla_detalle) FROM orden,detalle WHERE orden.id_orden=detalle.id_orden),'Los Repuestos o Productos estan todos aprobados, se muestra una fila',iF(count(estado_del_producto_en_tabla_detalle)<>(select count(estado_del_producto_en_tabla_detalle) FROM orden,detalle WHERE orden.id_orden=detalle.id_orden), 'Hay algun Repuesto o Producto no aprobado, por lo tanto no deberia mostrarse nada','en caso contrario algo esta fallando') )variable_de_if,count(estado_del_producto_en_tabla_detalle),ifnull(orden.id_order,'si nullo muestra algo') FROM orden,detalle WHERE orden.id_orden=detalle.id_orden AND (estado_del_producto_en_tabla_detalle = 'Repuesto_Aprobado' OR estado_del_producto_en_tabla_detalle = 'Producto_Aprobado')  GROUP BY orden.orden_id




me esta mostrando en una sola, cuando los estados de los productos estan todos okay, y me esta mostrando valores por el tipo de la consulta cuando hay algo malo, y aqui mi necesidad, cuando algo este malo simplemente quiero q no muestre nada.

si tengo la orden 1 2 y 3 y cada una de ellas con 5 productos por lo menos y por ej la numero 2 de sus 5 articulos hay alguno sin aprobar, yo quiero q no se muestre, todo esto quiero q sea en una sola fila, osea algo así

orden fecha

1 mar 2013


2 ene 2013 si esta tiene algun producto q tenga estado no aprobado, q no se muestre


3 abril 2013




gracias :D

Última edición por mono_chimuchino; 18/02/2014 a las 06:51
  #4 (permalink)  
Antiguo 18/02/2014, 06:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta MYSQL

Te decia sobre la última query que te he mandado

Cita:
Esto da id y fecha de las ordenes que no tienen ningun producto en "articulo_o_repuesto_no_aprobado"
lo has leido?

Has intentado ejecutarla?

Has intentado entender lo que te he mandado?

Hay algo concreto que no entiendas?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 18/02/2014, 06:57
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 13 años
Puntos: 0
Exclamación Respuesta: Consulta MYSQL

sip amigo, gracias, pero el estado está en la tabla detalle, no en el producto, por eso ponia el ejemplo, ojala puedas ayudarme :D
  #6 (permalink)  
Antiguo 18/02/2014, 07:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta MYSQL

Pues lo mismo pero cambiando la tabla....

Código MySQL:
Ver original
  1. SELECT DISTINCT detalle_de_orden.id_orden
  2. FROM detalle_de_orden
  3. WHERE detalle_de_orden.estado="articulo_o_repuesto_no_aprobado"

Esto da los id de las ordenes donde hay algo no aprobado


Código MySQL:
Ver original
  1. SELECT orden.id_orden,orden.fecha
  2. FROM orden LEFT JOIN
  3. (SELECT DISTINCT detalle_de_orden.id_orden
  4. FROM detalle_de_orden
  5. WHERE detalle_de_orden.estado="articulo_o_repuesto_no_aprobado") Sbc
  6.          ON orden.id_orden=Sbc.id_orden
  7. WHERE Sbc.id_orden IS NULL

Usando la anterior obtenemos la ordenes donde NO hay algo no aprobado


Se trata de intentar entender no de copiar/pegar!!!!

Además decias

Cita:
...ahora imaginemos que producto tiene un estado...
como voy a saber que no esta en producto?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 18/02/2014, 07:19
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 13 años
Puntos: 0
Exclamación Respuesta: Consulta MYSQL

okis, gracias...

Etiquetas: registro, select, tabla
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 14:00.