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

Procedimientos almacenados ayud4

Estas en el tema de Procedimientos almacenados ayud4 en el foro de Mysql en Foros del Web. Buenas amigos , en esta oportunidad vengo a pedir de su ayuda se lo agradeceria mucho. Estoy trabajando con MySql Query Browser y necesito realizar ...
  #1 (permalink)  
Antiguo 06/12/2012, 18:15
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Sonrisa Procedimientos almacenados ayud4

Buenas amigos , en esta oportunidad vengo a pedir de su ayuda se lo agradeceria mucho.

Estoy trabajando con MySql Query Browser y necesito realizar estos procedimientos almacenados agradeceria mucho de su ayuda.

1-MOSTRAR EL PRODUCTO MAS COMPRADO EN UNA DETERMINADA FECHA

2.-MOSTRAR EL MONTO TOTAL COBRADO POR CADA FACTURA EN UN RANGO DE FECHA.

3.-MOSTRAR LOS CLIENTES QUE COMPRARON PRODUCTO EN UN RANGO DE FECHA

4.-MOSTRAR LOS CLIENTES QUE COMPRARON EL PLATO MAS CARO EN UN RANGO DE FECHAS.

5.-MOSTRAR EL REPARTIDOR QUE EFECTUÓ MAS REPARTICIONES EN UN DETERMINADO DÍA.

6.-MOSTRAR EL, MONTO TOTAL COBRADO POR UN DETERMINADO REPARTIDOR EN UN DETERMINADO DÍA.


BD: restaurant

Tablas :

cliente

campos :

cod_cliente , nombre , direccion , telefono

factura

nfactura ,cod_cliente ,direccion ,telefono,fecha ,ruc,repartidor ,subtotal ,igv, total

detalle_factura

nfactura ,codigo_plato,descripcion,cantidad,precio_unitario ,costo

Repartidor

cod_repartidor ,nombres ,apellidos ,direccion ,telefono

platos
codigo_plato,descripcion, precio_unitario


Agradeceria mucho su ayuda , alguna duda hacerme saber.
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #2 (permalink)  
Antiguo 07/12/2012, 08:14
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Procedimientos almacenados ayud4

Intenta en el foro de MySQL: http://www.forosdelweb.com/f86/
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 07/12/2012, 10:30
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Estoy en el Lugar indicado , por que abrir un nuevo tema en : http://www.forosdelweb.com/f86/

Estube realizando hacer y de los procedimientos que habia colocado , solo me faltan 3 :

MOSTRAR LOS CLIENTES QUE COMPRARON PRODUCTO EN UN RANGO DE FECHA

MOSTRAR LOS CLIENTES QUE COMPRARON EL PLATO MAS CARO EN UN RANGO DE FECHAS.

MOSTRAR EL PRODUCTO MAS COMPRADO EN UNA DETERMINADA FECHA .


Gracias.
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #4 (permalink)  
Antiguo 07/12/2012, 10:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

- El primer caso, lo único que requieres es el rango, usando BETWEEN.
Código MySQL:
Ver original
  1. WHERE fecha BETWEEN fecha_desde AND fecha_hasta
donde fecha_desde y fecha_hasta deberían ser los parámetros de entrada del SP.

- En el segundo caso es lo mismo, pero agregando un HAVING donde busques que el precio del plato sea igual al mayor precio. Se puede obtener también con una subconsulta sobre el valor del plato en el WHERE.
Código MySQL:
Ver original
  1. WHERE codigo_plato = (SELECT MAX(codigo_plato) FROM ...)
  2.     AND fecha BETWEEN fecha_desde AND fecha_hasta
  3.     ...

- El tercero es simplemente contar cuáles son las cantidades vendidas agrupadas por plato, ordenarlas de mayor a menor y listar sólo la primera.

En realidad, no parece ser demasiado complicado... ¿Qué es lo que te causa dudas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/12/2012 a las 10:50
  #5 (permalink)  
Antiguo 07/12/2012, 11:12
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola , gnzsoloyo gracias por responder , las que no he podido solucionar son estos 3 procedimientos .

Podrias ser mas preciso al explicarme , ya que en la parte posterior he colocado un modelo de base de datos a lo que estoy necesitando que me ayuden.

Espero me puedas ayudar , son los que se me hacen mas complicados por que es la union de dos tablas .

MOSTRAR LOS CLIENTES QUE COMPRARON PRODUCTO EN UN RANGO DE FECHA

(Al realizar esta consulta debe mostrarme los clientes (nombres o cod ) en un rango de fechas es decir la tabla cliente y factura , por que en factura esta la fecha y no en cliente.)

MOSTRAR LOS CLIENTES QUE COMPRARON EL PLATO MAS CARO EN UN RANGO DE FECHAS.

MOSTRAR EL PRODUCTO MAS COMPRADO EN UNA DETERMINADA FECHA .
__________________

"Nuestra capacidad se aleja de la Humanidad"

Última edición por nexus44; 07/12/2012 a las 11:17
  #6 (permalink)  
Antiguo 07/12/2012, 11:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

¿No sabes hacer un INNER JOIN entre tablas?


La primera es más la forma de hacer la consulta, que termina siendo muy elemental:
Código MySQL:
Ver original
  1. FROM cliente C INNER JOIN factura F ON C.cod_cliente = F.cod_cliene
  2. INNER JOIN detalle_factura DF ON F.nfactura = DF.nfactura
  3.     F.fecha BETWEEN fecha_desde AND fecha_hasta
  4.     AND cod_plato = codbuscado
De hecho, considerando que no puede haber una factura sin platos vendidos, entonces sólo se requiere:
Código MySQL:
Ver original
  1. FROM cliente C INNER JOIN factura F ON C.cod_cliente = F.cod_cliene
  2.     F.fecha BETWEEN fecha_desde AND fecha_hasta
Obviamente, fecha_desde, fecha_hasta son parámetros de entrada del SP.

¿es eso lo que quiers.

esencialmente es lo mismo que te dije en el post anterior.
¿Por qué no se entiende lo que te dije?
__________________
¿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 07/12/2012, 20:57
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola gnzsoloyo , estado revisando tu aporte correcto la 1er procedimiento que me colocaste esta perfecto .

En el 2do Lo que me colocas , debe mostrarme los clientes que compraron el plato mas caro en un rango de fechas por lo cual , solo los muestra en general (en lo que colocaste).

Creo que deberia haber un (total)max de la tabla factura ? como lo podria colocar

Pediria amablemente tu ayudar , si es no seria tanto problema ?

Disculpa la ignorancia pero uno aprende a medida de la practica y en ese camino me encuentro.

Salu2.
__________________

"Nuestra capacidad se aleja de la Humanidad"

Última edición por nexus44; 07/12/2012 a las 21:06
  #8 (permalink)  
Antiguo 08/12/2012, 03:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Muestrame cómo lo plantearías tu, y vemos si está bien. Si hay algo que me parezca que debe ser de forma distinta, te comento qué deberías hacer, y por qué.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 08/12/2012, 10:27
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola , gnzsoloyo es lo que masomenos he podido hacer , alguna correccion? del hecho se lo agradeceria mucho me ayude porfavor.

SELECT Max(total) AS ElMax FROM factura
INNER JOIN cliente C ON F.nfactura = C.nfactura
WHERE
F.fecha BETWEEN fecha_desde AND fecha_hasta;
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #10 (permalink)  
Antiguo 08/12/2012, 12:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Con eso estás buscando el total de factura más alto pagado por los clientes en un período, y lo que te preguntan es otra cosa.
Te lo recuerdo:
Cita:
MOSTRAR LOS CLIENTES QUE COMPRARON EL PLATO MAS CARO EN UN RANGO DE FECHAS.
Es decir, debes buscar cuáles son los clientes que en un período de tiempo, compraron el plato que en esas facturas aparece como el mas caro.
No tiene nada que ver con lo que estás poniendo allí.
Empieza de nuevo y arma la consulta en base a lo que te describo:
- El plato más caro facturado en alguna factura.
- Los clientes que compraron el mismo plato, en todo ese período de fechas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 09/12/2012, 14:55
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola gnzsoloyo estado tratando de realizar la consulta sin embargo no tengo ningun resultado bueno :( , agradeceria me ayudes a solucionar esa consulta o almenos me des una luz donde poder realizar el procedimiento.

Segun la conclusion que he pido hace se debe trabajar con la tabla .

Detalle Factura donde se encuentra el cod_plato , factura entre fechas y los clientes para listarlos . Se me hace muy complicado juntar estado trabajando en esto y no lo he logado perdon la ignorancia .

Agradeceria mucho que me ayude sino de todas maneras gracias por la ayuda .
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #12 (permalink)  
Antiguo 09/12/2012, 17:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Mira, sin pretender ofender, pero lo que hacemos en este foro (y a estas alturas ya debes haber notado) es guiarte en la solución, pero no te voy a dar el código del SP como obsequio. Lo que quiero lograr es que lo deduzcas y lo implementes tu mismo.
De otra forma, no vas a aprender a resolver este tipo de problemas.
Darte el código sólo serviría para que apruebes el examen (lo digo ya que parecen ejercicios de la universidad), y eso no servirá de nada a la larga.
Entonces, yo ya te he planteado cuáles son las dos cosas que debes resolver:
- El plato más caro facturado en alguna factura de un periodo dado.
- Los clientes que compraron un mismo plato, en un período dado de fechas.
Lo que quiero que postees es cómo harías tu para lograr averiguar ambas cosas por separado.
Si logras plantear esas dos consultas, tienes el problema completo resuelto.
Hazlo.
Ya has mostrado que puedes hacer esas consultas con lo que posteaste antes. Hazlo con estas dos y vemos como se combinan.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 09/12/2012, 19:52
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Eso es lo que trato de hacer , pero si te das cuenta , pide "El plato más caro y listar quienes fueron los clientes que hiceron esa compra" no el monto mayor facturado en una factura.

Es por eso que creo se debe combianar Detalle_factura - Factura - Clientes , o estoy mal?

Salu2.
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #14 (permalink)  
Antiguo 10/12/2012, 03:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

En lugar de seguir dandole vueltas a la pregunta, postea las consultas que según estimas te devolverán lo que te digo.
Escribe esas sentencias y muestralas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 10/12/2012, 18:13
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola , estube tratando de realizar esta consulta , pero sin embargo no la logro con exito.

MOSTRAR EL PRODUCTO MAS COMPRADO EN UNA DETERMINADA FECHA .

Código PHP:
Ver original
  1. select fecha=fec from factura  union all select codigo_plato . detalle_factura , top (1) AS 'Mas comprado' from detalle_factura;
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #16 (permalink)  
Antiguo 10/12/2012, 18:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Por favor, resuelve las partes del problema como te las planteo. Una vez que resueltas estas partes, la solución de todo el problema surgirá sola.
¿Puedes seguir mi consejo?
Cita:
- El plato más caro facturado en todas las facturas de un periodo dado.
- Los clientes que compraron un plato determinado, en un período dado de fechas.
Son dos consultas separadas. Resuelve esto, postealo acá, y te explico cómo se integran (eso si no te diste cuenta antes).

PD: Lo que posteaste recién no sirve para nada. No es la solución.
PD2: TOP no es cláusula de MySQL. No la podrás usar.

¿Es tan difícil de hacer lo que te pido?
Solamente te digo que resuelvas esas dos consultas que te propongo, y verás que todo tu ejercicio se resuelve.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/12/2012 a las 18:35
  #17 (permalink)  
Antiguo 10/12/2012, 19:06
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Parte 01 - Muestra el plato mas caro con su costo.
Código MySQL:
Ver original
  1. select max(costo), codigo_plato from detalle_factura;

parte 02 - El plato mas vendido

Código MySQL:
Ver original
  1. SELECT detalle_pedido .codigo_plato, Sum(1) AS Expr1
  2. FROM detalle_pedido
  3. GROUP BY detalle_pedido.codigo_plato;

Esto es lo que estado realizando .

Código MySQL:
Ver original
  1. SELECT descripcion, count(detalle_factura.codigo_plato) as cantidad FROM
  2. detalle_factura INNER JOIN plato USING(codigo_plato)
  3. GROUP BY detalle_factura.codigo_plato HAVING cantidad = (SELECT count(*) from detalle_factura GROUP BY codigo_plato ORDER BY count(*) DESC LIMIT 1);


Sin embargo no logro realizar la consulta al exito , salu2.
__________________

"Nuestra capacidad se aleja de la Humanidad"

Última edición por gnzsoloyo; 10/12/2012 a las 20:02 Razón: Código mal etiquetado.
  #18 (permalink)  
Antiguo 10/12/2012, 19:12
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Plato mas vendido :
como puedo ir juntando todo ?

Código MySQL:
Ver original
  1. SELECT MAX(detalle_factura.codigo_plato) AS mas_vendido FROM
  2. detalle_factura,plato WHERE detalle_factura.codigo_plato=plato.codigo_plato;


Aqui me muestra el plato que ha sido mas vendido pero sin embargo me falta , lo de la fecha :(
__________________

"Nuestra capacidad se aleja de la Humanidad"

Última edición por gnzsoloyo; 10/12/2012 a las 20:01 Razón: Código mal etiquetado.
  #19 (permalink)  
Antiguo 10/12/2012, 23:35
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola , gnzsoloyo espero alguna respuesta , como debo unir

MOSTRAR EL Plato MAS COMPRADO EN UNA DETERMINADA FECHA


1.- Aca ya me muestra los plato mas comprado .

Código MySQL:
Ver original
  1. SELECT MAX(detalle_factura.codigo_plato) AS mas_vendido FROM
  2.     detalle_factura,plato WHERE detalle_factura.codigo_plato=plato.codigo_plato;

2.- Como debo juntar este pequeño codigo para que sea ala fecha , se que no esta correcto por lo que debe coordinar con detalle_factura y su campo nfactura .

Código MySQL:
Ver original
  1. Select * from factura where fecha=fec;

Espero tu ayuda de la manera mas amable a solucionar esto ya que es con urgencia porfavor , Salu2.
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #20 (permalink)  
Antiguo 11/12/2012, 03:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Yo también duermo.
Ten paciencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 11/12/2012, 09:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

El principal problema que te veo es que pierdes de vista lo que realmente te piden, y por ello te pones a buscar cosas que no están relacionadas.
El ejercicio en realidad es simple:
Mostrar los clientes que hayan comprado el plato más caro de un determinado periodo de tiempo.
Hay tes cosas que debes determinar para resolverlo:
1) La lista de clientes que compraron algo en ese período.
2) La lista de platos comprados durante ese período.
3) El plato más caro vendido en ese período.
No importa si es el mas caro de todos, o cómo se llama el plato, ni tampoco interesa en la consulta la cantidad de veces que cada cliente compró ese mismo plato. Ninguna de esas cosas se está preguntando en ese caso.
Por eso digo que pierdes de perspectiva lo que realmente te preguntan.
En primer lugar, veamos la lista de clientes:
Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2. FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente;
Eso determina los clientes a los que se facturó, sin importar cuándo fue.
Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2. FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente;
  3. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta;
Eso devuelve sólo las que corresponden a un rango de fechas (eso ya lo habías hecho, ¿por qué no lo tomaste de nuevo?).
Si quieres saber el listado de platos, necesitas el detalle de la factura:
Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2. FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente;
  3.  INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  4. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta;
Con el detalle de lafactura estás obteniendo (aunque no es necesario mostrarlo porque no lo pide) el co_plato, por lo que bien puedes buscar uno sólo o muchos.
Un sólo plato
Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2. FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente
  3.     INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  4. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  5.     AND d.cod_plato = 2;
Más de un plato:
Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2. FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente
  3.     INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  4. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  5.     AND d.cod_plato IN(2, 34, 6, 12, 1890);
Ahora bien, debemos determinar el código de pato correspondiente al plato más caro, y eso se puede hacer de dos formas:
Código MySQL:
Ver original
  1. SELECT DISTINCT d.codigo_plato
  2. FROM factura f INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  3. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
o bien:
Código MySQL:
Ver original
  1. SELECT DISTINCT d.codigo_plato
  2. FROM factura f INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  3. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  4. HAVING d.costo =MAX(d.costo)

Vamos a usar la primera de ambas:
Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2. FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente
  3.     INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  4. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  5.     AND d.cod_plato =
  6.         (SELECT DISTINCT d.codigo_plato
  7.         FROM factura f INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  8. WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  9.         ORDER BY costo DESC
  10.         LIMIT 1);

Aclaremos que esta no es la única forma de solucionar algo por el estilo. Pero no podrás solucionar ninguna si no te pones a razonar las consultas desglosando las condiciones que deben cumplir. Por eso te pedía que lo planearas por partes.

Ahora intenta hacer lo mismo (el modo de razonarlo, no el ejercicio) con el otro caso, por ti mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 11/12/2012, 10:25
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola , gnzsoloyo gracias por ser tan amable al responder a mis dudas y casos que he colocado , es muy cierto lo que dices acabo de leerlo detenidamente para poder captar la razon de las consultas sin embargo .

La consulta que pide :


MOSTRAR EL PRODUCTO MAS COMPRADO EN UNA DETERMINADA FECHA


Esta solucionada con parte de lo que has colocado en tu respuesta anterior.

Código MySQL:
Ver original
  1. SELECT DISTINCT d.codigo_plato
  2.     FROM factura f INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  3.     WHERE f.fecha=fecha_desde
  4.     ORDER BY costo DESC
  5.     LIMIT 1;

En la consulta que nos pide lo siguiente :

MOSTRAR LOS CLIENTES QUE COMPRARON EL PRODUCTO MAS CARO EN UN RANGO DE FECHAS.

Ala hora que corro el procedimiento , lo acepta con exito pero al momento que voy a colocar el sp (fecha_desde , fecha_hasta ) me muestra un error referente con un mensaje

Unknown column 'c.cod cliente' in 'field list'
Desconocido columna 'c.cod Cliente' en el campo 'lista'

Viene de la Linea numero 1 , el problema pero no entiendo por que las consultas separadas funcionan bien y al momento que estan juntas sale este error.

Código MySQL:
Ver original
  1. SELECT DISTINCT c.cod_cliente, c.nombre
  2.     FROM factura F INNER JOIN cliente ON f.cod_cliente = c.cliente
  3.         INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  4.     WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  5.         AND d.cod_plato =
  6.             (SELECT DISTINCT d.codigo_plato
  7.             FROM factura f INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  8.     WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  9.             ORDER BY costo DESC
  10.             LIMIT 1);

Disculpa por tanta molestia y inconformidad a mi persona.
GRACIAS.
__________________

"Nuestra capacidad se aleja de la Humanidad"

Última edición por nexus44; 11/12/2012 a las 10:42
  #23 (permalink)  
Antiguo 11/12/2012, 10:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Cita:
Unknown column 'c.cod cliente' in 'field list'
Desconocido columna 'c.cod Cliente' en el campo 'lista'
Esto ya lo puedes resolver tu mismo: Verifica que los alias se correspondan correctamente con los de las tablas que se invocan.
Cada alias usado debe ser el de su tabla, y lo que te está diciendo es que una de las columnas es desconocida, porque la tabla indicada no es la correcta
Es un simple error de escritura porque yo no tengo ni las tablas ni los datos para probar eso, sólo lo he armado teóricamente.
Como tip te puedo decir: Cada consulta o subconsulta debe tener tablas con alias diferentes, o pueden generarse errores.
Revisa la sintaxis y corrige.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 11/12/2012, 11:39
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola gnzsoloyo Acabo de solucionarlo y queda asi :

Código MySQL:
Ver original
  1. SELECT DISTINCT  f.cod_cliente , c.nombre
  2.     FROM factura F INNER JOIN cliente c  ON f.cod_cliente = c.cod_cliente
  3.         INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  4.     WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  5.         AND d.codigo_plato=
  6.             (SELECT DISTINCT d.codigo_plato
  7.             FROM factura f INNER JOIN detalle_factura d ON f.nfactura = d.nfactura
  8.     WHERE f.fecha BETWEEN fecha_desde AND fecha_hasta
  9.             ORDER BY costo DESC
  10.             LIMIT 1);

GRACIAS POR TODO Y SER MUY AMABLE .
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #25 (permalink)  
Antiguo 11/12/2012, 11:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 12/12/2012, 10:23
Avatar de nexus44  
Fecha de Ingreso: octubre-2012
Ubicación: Piura
Mensajes: 108
Antigüedad: 12 años
Puntos: 1
Respuesta: Procedimientos almacenados ayud4

Hola , gnzsoloyo tengo un pequeño problema referente , al utimo procedimiento que realize y bueno es el siguiente :

En plataforma windows , estoy trabajando con query broswer y el procedimiento me corrio ala perfeccion.

Al Realizar en procedimiento en plataforma linux , con query broswer me da error al colocar el Sp , en el rango de fechas?

No comprendo cual es el problema , no se si alguna vez te habra sucedido eso.

Salu2.
__________________

"Nuestra capacidad se aleja de la Humanidad"
  #27 (permalink)  
Antiguo 12/12/2012, 11:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimientos almacenados ayud4

Cuando cambias entre plataformas de ese tipo lo primero que tienes que revisar es que la sintaxis de las denominaciones de tablas, bases, columnas, funciones, procedimientos, funciones propias de MySQL, vistas y todos los demás componentes no se encuentren escritos con diferencias entre mayúsculas y minusculas de sus nombres.
El Linux es sensible a esas diferencias, por lo cual no es lo mismo invocar la función UUID() que uuid(), por ejemplo. En Linux la primera da error por función no declarada o desconocida, y la segunda devuelve el uuid (es un ID universal).
Entonces, si por ejemplo la tabla la creas como
Código MySQL:
Ver original 
y luego la llamas como
Código MySQL:
Ver original
  1. SELECT * FROM Tabla
te dirá que la tabla es deconocida.

Por eso se tiene en las empresas de desarrollo la especificación de que todo nombre de objeto de base de datos se escribe siempre en minúsculas.

Verifica eso (puede que te lleve un buen rato). Luego veremos otras posibilidades, como por ejemplo, la versión del servidor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: procedimientos, almacenar
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 09:47.