Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ayuda Select super multiples en mysql

edmar065

Bovino maduro
Desde
6 Ago 2007
Mensajes
242
Buenas tardes estimados bakunos.!

El dia de hoy acudo a ustedes por que estoy desarrollando una pequeña aplicacion web basada en php y mysql y me encontre con el siguiente problema.. (la aplicacion es sobre unas tarjetas de regalo que distribuire en varias tiendas)

Tengo una table tarjeta_
id_
folio_
vendidaen_
monto_
fecha_
ca_

Otra tabla tienda_
id_
nombre_

Y otra tabla tarjeta_canjeada
id_
folio_
candeajaen_
fecha_

Hasta aqui todo bien mi problema es que necesito tirar unos reportes que me den esta informacion:

folio_ | fecha_ | vendidaen_ | monto_ | canjeadaen_ | fecha

Mi problema radica en que cuando quiero que tanto en vendidaen_ como en canjeadaen_ aparesca el nombre de dichas tiendas.. es nomas no me da el resultado...

Les pongo la sentencia que tengo... no soy muy diestro en join, inner join, left join... pero estoy 100% seguro que con una sentencia de este estilo se soluciona.. agradezco su apoyo... y espor que alguien se compadesca de mi...

select folio_, nombre_, vendidaen_, monto_, fecha_, estatus_
from tarjeta, tienda
where estatus_ = '$criterio' and fecha_ between '$finicio' and '$ffin'
and tarjeta.vendidaen_ = tienda.id_

Esto me aroja el listado de las tarjetas activadas en un rango de fechas.. pero cuando quiero sacar tambien en el mismo renglon si fue canjeada y la fecha ahi me atoro..

select t1.folio_, t1.vendidaen_, t1.fecha_, t3.nombre_, t1.estatus_, t2.fecha_ as fecha2, t2.canjeadaen_
from tbl_tarjeta t1
inner join tbl_tarjeta_canjeada t2 on (t1.folio_= t2.folio_)
left join tbl_tienda t3 on (t1.vendidaen_ = t3.id_)
where t1.fecha_ between '2013/07/10' and '2013/07/10'

No se si ya me lie mucho.. pero ya no le hayo ni para adelante ni para atras..!!

Gracias de antemano.
 
select folio_, nombre_, vendidaen_, monto_, fecha_, estatus_
from tarjeta, tienda
where estatus_ = '$criterio' and fecha_ between '$finicio' and '$ffin'
and tarjeta.vendidaen_ = tienda.id_

Pregunta: de donde salio el campo estatus_??
Otra Pregunta: en que momento haces la union entre la tabla Tarjeta y la Tienda??

select t1.folio_, t1.vendidaen_, t1.fecha_, t3.nombre_, t1.estatus_, t2.fecha_ as fecha2, t2.canjeadaen_
from tbl_tarjeta t1
inner join tbl_tarjeta_canjeada t2 on (t1.folio_= t2.folio_)
left join tbl_tienda t3 on (t1.vendidaen_ = t3.id_)
where t1.fecha_ between '2013/07/10' and '2013/07/10'

aun que no entiendo bien que es lo que quieres yo haria un LEFT JOIN con Tarjeta Canjeada pues con el INNER solo te va a traer las tarjetas que hayan sido canjeadas y si no hay pues no te arroja nada :p

pero mi no entender cual es el problema
 
Buenas tardes, muchas gracias por tu interes...

Mira te comento el campo estatus_ viene de la tabla tarjeta_ solo que no puse todos los campos por cuestion de rapidez...

La union... entre la table tarjeta y la tabla tienda se realiza con el campo vendidaen_ en la tabla tarjeta y con el campo id_ de la tabla tienda..

Y como comentaba el problema es que yo necesito arojar este resultado:

Folio de la tarjeta
De donde se compro
En que fecha se compro
Monto de la misma
Donde se canjeo
Y fecha en la que se canjeo

El problema que yo le veo. es que tanto donde se compro (nombre de la tienda) como donde se canjeo (nombre de la tienda) no se como ligarlos...

No se si me doy a entender amigo... espero y que si..

Saludos.
 
suponiendo la tarjeta puede estar vendida pero no es un hecho que sea canjeada:

select t1.folio_,t1.fecha_ as fechaVenta,t3.nombre_ as vendidaEn,t1.monto_,t4.nombre_ as canjeadaEn,t2.fecha_ as fechaCanje from tarjeta t1 left join tarjetacanjeada t2 on t1.folio_=t2.folio_
left join tienda t3 on t1.vendidaen_ = t3.id_
left join tienda t4 on t2.canjeadaen_=t4.id_
where t1.fecha_ between '2013/07/10' and '2013/07/10'

posible solucion... aunque creo puede ser mejorada
 
suponiendo la tarjeta puede estar vendida pero no es un hecho que sea canjeada:

select t1.folio_,t1.fecha_ as fechaVenta,t3.nombre_ as vendidaEn,t1.monto_,t4.nombre_ as canjeadaEn,t2.fecha_ as fechaCanje from tarjeta t1 left join tarjetacanjeada t2 on t1.folio_=t2.folio_
left join tienda t3 on t1.vendidaen_ = t3.id_
left join tienda t4 on t2.canjeadaen_=t4.id_
where t1.fecha_ between '2013/07/10' and '2013/07/10'

posible solucion... aunque creo puede ser mejorada
 
Volver
Arriba