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

Ayuda con consulta sql por favor

Estas en el tema de Ayuda con consulta sql por favor en el foro de Mysql en Foros del Web. Hola, amigos, quiero ver si alguien me puede ayudar con una consulta de una Base de Datos Mysql, ya que estoy un poco complicado. La ...
  #1 (permalink)  
Antiguo 02/04/2007, 21:00
 
Fecha de Ingreso: abril-2007
Ubicación: Chile
Mensajes: 27
Antigüedad: 12 años, 8 meses
Puntos: 0
Sonrisa Ayuda con consulta sql por favor

Hola, amigos, quiero ver si alguien me puede ayudar con una consulta de una Base de Datos Mysql, ya que estoy un poco complicado.

La cosa es que estoy haciendo para un conocido un pequeño sistema para llevar un negocio, en donde los ingresos son por Boletas, Facturas y otros.

Para esto decidí dividir Boletas, facturas y otros en 3 tablas, o sea, cada una tiene su propia tabla y como clave primaria uso el número de boleta y factura que trae cada cual, y a "otros" le invento un número. Así por ejemplo, si existe la factura 30, también puede existir la boleta 30, u "otros ingresos número 30" (eso no es problema, porque son tablas distintas.

Bueno, la cosa es que hice una sección donde al ingresar un periodo de fecha, se puede mostrar el detalle de "ventas" o ingresos de ese periodo, indicando el "total" de ingresos en dinero.

Algo así:

periodo 20-marzo-2007 a 21-marzo-2007

boleta 3 - $5000 - 20 marzo 2007 - 10:57
factura 3 - $3000 - 20 marzo 2007 - 15:08
otros 2 - $ 2000 - 21 marzo 2007 - 12:20
==================================
Total venta periodo: $10.000

Bueno, mi problema es que no se me ocurre cómo hacer la consulta, por más que le he dado vueltas, ya que lo único que une a las tablas entre sí es la fecha y hora en que fue hecha. Si hago un join me va a dar el producto cartesiano de ello.

No estoy seguro si debería ser algo así:

select * from factura, boleta, otro where fac_fecha=bol_fecha and fac_fecha=otro_fecha and fac_fecha between $fecha_inicial to $fecha_final;

¿algo así, o me convendría poner todo en una misma tabla? El problema es que la tabla factura tiene muchos campos que no son necesarios en las otras 2. Bueno en fin, apelo a su conocimiento, ojalá me puedan echar una mano, y así continúo con esto que lo tengo detenido hace varias semanas.

¿Quizás la solución una vista?.

Cualquier cosa me consultan.

¡Muchas Gracias!

Saludos. Álvaro.

Última edición por DarkMaurice; 02/04/2007 a las 22:16
  #2 (permalink)  
Antiguo 03/04/2007, 03:23
 
Fecha de Ingreso: abril-2007
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 0
Re: Ayuda con consulta sql por favor

Hola!

En sql se pueden unir varias consultas en una y creo q es lo q necesitas.

la funcion es: UNION ALL

El unico requisito para usarla es q los campos q kieras mostrar sean los mismos en las n-tablas.

Un ejemplo:

Select nombre, apel1, apel2
from tabla1
where fec_nac="23/03/2007"
UNION ALL
Select nombre, apel1, apel2
from tabla2
where fec_nac="23/03/2007"
UNION ALL
Select nombre, apel1, apel2
from tabla3
where fec_nac="23/03/2007"

Espero que te sirva en tu caso.

Un saludo
  #3 (permalink)  
Antiguo 03/04/2007, 09:45
 
Fecha de Ingreso: abril-2007
Ubicación: Chile
Mensajes: 27
Antigüedad: 12 años, 8 meses
Puntos: 0
Re: Ayuda con consulta sql por favor

Gracias por tu respuesta, aún no he probado lo que me dices, pero antes de hacerlo me surgen ciertas interrogantes, necesito mostrar campos que son parecidos, pero no se llaman igual.

Por ejemplo, en la clave primaria de facturas es fac_numero, de boletas es bol_numero y de otros seria otros_numero, ambas son del mismo tipo, pero como ves tienen distintos nombres, ¿funcionará de todas maneras el UNION?.

La otra consulta es que si funciona como puedo hacer para ordenar las 3 tablas por fechas, pero que no queden agrupadas por "tipo de ingreso", o sea que quede asi:

20 marzo boleta
20 marzo factura
20 marzo factura
20 marzo otros
20 marzo boleta
21 marzo factura

y no asi

20 factura
20 factura
21 factura

20 boleta
20 boleta

20 otros.

No se si me explico bien , bueno la idea es esa, que ordene por la fecha de ingreso, pero no se me ocurre como poner el order by, ya que cada tabla seria fac_fecha, bol_fecha, otros_fecha. y aunque le pusiera el mismo nombre me daría error por ambiguedad, teniendo que usar alias, y sería lo mismo. Aclaro que no uso claves foraneas en estas tablas.

Gracias!
  #4 (permalink)  
Antiguo 05/04/2007, 09:59
Avatar de SeriketZu  
Fecha de Ingreso: septiembre-2006
Ubicación: Mendoza, Argentina
Mensajes: 78
Antigüedad: 13 años, 3 meses
Puntos: 0
Re: Ayuda con consulta sql por favor

deberías hacer algo así:

Select factura_nro As Nro, "Factura" As Tipo, fecha, hora, importe From facturas
Where Fecha >= @finicial And Fecha <= @ffinal
Union
Select boleta_nro As Nro, "Boleta" As Tipo, fecha, hora, importe From boletas
Where Fecha >= @finicial And Fecha <= @ffinal
Union
Select otros_nro As Nro, "Otros" As Tipo, fecha, hora, importe From otros
Where Fecha >= @finicial And Fecha <= @ffinal

Bueno, esa es la idea, no estoy acostumbrado a MySQL pq estoy empezándolo a usar ahora, pero asi sería en SQL Server y no creo que cambie mucho.
Tal vez podría ponerse un solo Where al final, y también usar el between que pusiste en tu post (que no lo conocía). Luego también podés usar order by para obtenerlos por fecha.

Espero que te sirva, saludos.
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 01:57.