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

Subconsulta JOIN

Estas en el tema de Subconsulta JOIN en el foro de Mysql en Foros del Web. Hola compañeros, tengo una base de datos en la que guardo una serie de pedidos. En estos pedidos hay pizzas, bebidas y ensaladas. En una ...
  #1 (permalink)  
Antiguo 26/04/2011, 05:13
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 2 meses
Puntos: 4
Subconsulta JOIN

Hola compañeros,

tengo una base de datos en la que guardo una serie de pedidos. En estos pedidos hay pizzas, bebidas y ensaladas.

En una consulta saco los pedidos del dia de hoy, el problema está en que no consigo hacer la consulta correctamente para que me muestre NULL si no se han pedido bebidas, ensaladas o pizzas, lo he intentado con LEFT JOIN pero no l consigo

Las tablas que tengo son las siguientes: pedidos, pizzas, pedidos_otros_productos, otros_productos. En estas dos ultimas tablas guardo las bebidas y ensaladas.

La consulta para que me muestre unicamente las pizzas es facil y la tengo así:
Código PHP:
SELECT pedidos.id_pedidopedidos.numero_pedidopedidos.fechaTIME_FORMAT(pedidos.fecha'%H:%i:%S') AS horapizzas.preciopizzas_ingredientes.id_pizzatamanos.tamanoingredientes.ingrediente
                FROM pedidos
pizzastamanospizzas_ingredientesingredientes
                WHERE pedidos
.id_pedido pizzas.id_pedido
                
AND pizzas.id_tamano tamanos.id_tamano
                
AND pizzas.id_pizza pizzas_ingredientes.id_pizza
                
AND pizzas_ingredientes.id_ingrediente ingredientes.id_ingrediente
                
AND fecha
                    BETWEEN 
'".$fecha_dia."'
                    
AND '".$fecha_noche."' 
La consulta que he intentado hacer con el JOIN es la siguiente:
Código PHP:
SELECT pedidos.id_pedidopedidos.numero_pedidopedidos.fechaTIME_FORMAT(pedidos.fecha'%H:%i:%S') AS horapizzas.preciopizzas_ingredientes.id_pizzatamanos.tamanoingredientes.ingrediente,
(
SELECT *
    
FROM pedidos
    LEFT JOIN pedidos_otros_productos ON pedidos
.id_pedido pedidos_otros_productos.id_pedido)

                
FROM pedidospizzastamanospizzas_ingredientesingredientes
                WHERE pedidos
.id_pedido pizzas.id_pedido
                
AND pizzas.id_tamano tamanos.id_tamano
                
AND pizzas.id_pizza pizzas_ingredientes.id_pizza
                
AND pizzas_ingredientes.id_ingrediente ingredientes.id_ingrediente
                
AND fecha
                        BETWEEN 
'".$fecha_dia."'
                        
AND '".$fecha_noche."' 
Un saludo ;)
  #2 (permalink)  
Antiguo 26/04/2011, 07:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Subconsulta JOIN

La sintaxis es

Código MySQL:
Ver original
  1. ...
  2. FROM (tabla1 t1 LEFT JOIN tabla 2 t2  ON t1.campocomun=t2.campocomun)
  3.            LEFT JOIN tabla3 t3 ON t1.campocomun=t2.campocomun
  4. ...

En este caso te saldrian todos los registros de la tabla1 (pedidos en tu caso) y los campos de las otras tablas, quedando nulos los que no tengan relacion...

Solo puedes poner un FROM...

Si tienes

Pedidos
idPedido cliente
1................1

Pizzas
idPizzas idPedido Pizza
1.................1........Margarita

Bebidas
idBebidas idPedido Bebida
---------------------------------

Código MySQL:
Ver original
  1. SELECT p.idPedido,p.Cliente,pp.Pizza,b.Bebida
  2. FROM (pedidos p LEFT JOIN pizzas pp ON p.idpedido=pp.idpedido)
  3. LEFT JOIN bebidas b ON p.idpedido=b.idpedido

1.........1.........Margarita........null

ojo que si alguien pide dos bebidas y una pizza saldra dos veces la pizza

lo mismo en la tablas anteriores y

Bebidas
idBebidas idPedido Bebida
1....................1.........Cola
2....................1.........Birra


1.........1.........Margarita........Cola
1.........1.........Margarita........Birra

La solucion seria replantear el esquema con lo siguiente, cuatro tablas

Pedidos
idPedido
cliente
...

DetallePedido
idDetalle
idPedido
idProducto
cantidad
...


Productos
idProducto
Producto
idFamProducto
...

FamProducto
idFamProducto
FamProducto
....

Analizando la familia del procuto podrias ver si hay bebidas o no...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 26/04/2011, 08:55
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 2 meses
Puntos: 4
Respuesta: Subconsulta JOIN

Muchisimas gracias quimfv

Me sirvió mucho el primer ejemplo, esto lo estudié pero nunca llegué a comprenderlo bien.

Porque no se utiliza con los JOIN el WHERE y los AND?? y como es que se encierra la primera condición entre parentesis en el FROM y los demas fuera de esos parentesis???

Mil gracias ;)

Etiquetas: join, subconsulta
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 07:46.