Pregunta

Estoy usando MySQL y PHP. Tengo una tabla que contiene las columnas id y cantidad. Me gustaría recuperar la identificación de la fila que es la última en sumar cantidad, ya que alcanza el número 40 en la suma. Para ser más especifico. Tengo 3 filas en la base de datos. Uno con la cantidad 10, uno con la cantidad 30 y uno con la cantidad 20. Entonces, si sumo las cantidades para obtener el resultado 40, resumiría los dos primeros significados de brujas: 10 + 30 = 40. De esa manera, el último Id que se usa para sumar que el número 40 es 2. Solo quiero saber la identificación de la última fila que se usa para completar la suma de 40.

Daría más detalles si me lo piden. ¡GRACIAS!


Déjame ponerlo de esta manera: Realmente tengo 6 productos en mi mano. El primero llegó a mi posesión en la fecha del 10, los siguientes 3 llegaron en la fecha del 11 y los últimos 2 en el 12.

Ahora, quiero vender 3 productos de mi stock. Y quiero venderlos en el orden en que vinieron. Entonces, para el cliente que quiere 3 productos, le vendería el producto que vino con 10 y 2 productos de los que vino con 11.

Para el próximo cliente que quiera 2 productos, le vendería un producto a partir de la fecha del 11 que queda del último pedido de 3 productos, y otro de los del 12.

La pregunta es cómo sabría qué precio tenía cada producto que vendí. Pensé que si puedo averiguar qué filas suman cada cantidad solicitada, sabría dónde comenzar la suma cada vez que quiero entregar un pedido. Entonces, primero miraría qué filas resumen 3 productos y mantendría la identificación de entrada. Para el próximo pedido, comenzaría a contar desde esa ID y sumaría hasta que sume el segundo pedido de 2 productos y así sucesivamente. Pensé que de esta manera, puedo hacer un seguimiento de los precios entrantes que tenía cada producto. Por lo tanto, no venderé los productos a partir de la fecha de 12 a un precio compuesto usando los primeros precios.

Espero que lo entiendas. Solo necesito saber qué precio tenía alguno de mis productos, así sabría que los primeros productos tendrían un precio, pero a medida que aumenten los precios del producto, también debo aumentar mis precios ... Entonces, los últimos productos que vinieron deben venderse por Un precio más alto. Solo puedo lograrlo si hago un seguimiento de esto ...

Muchas gracias.


¿Nadie? O, aún más fácil: MySQL debería seleccionar las filas necesarias para que SUM (quantity) sea mayor o igual a 40, por ejemplo. Y luego para obtener la identificación de la última fila que participó en el proceso de suma.

¿Fue útil?

Solución

No entiendo muy bien tu pregunta. ¿Puedes intentar redactarlo más correctamente? Por lo que interpreto, aquí está la estructura de su base de datos:

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

Ahora estás preguntando, " ¿cómo sabría qué precio tenía cada producto que vendí " ;? Lo que me confunde, ya que cada valor en la base de datos no tiene atributo de precio. ¿Su base de datos no debería verse así?

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

Personalmente, creo que su idea de averiguar el precio vendido es errónea. Tendría más sentido agregar algunos campos más a su base de datos:

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

Al cambiar su base de datos, puede realizar fácilmente un seguimiento de cuándo llega un producto, la fecha de venta, su precio, tal vez la cantidad (no puedo decir si es un campo real o no).

Además, puede simplificar y hacer su vida más fácil separando las consultas sql, o incluso agregando algún código para hacer parte del trabajo por usted.

Otros consejos

Tener una tercera columna con un total acumulado. Luego, simplemente puede devolver la última fila donde el total acumulado & Lt; = su valor objetivo.

Entonces su tabla debería verse así:

ID    Quantity    RunningTotal
1           10              10
2           30              40
3           20              60

NOTA: Si elimina una fila de la tabla, recuerde actualizar todas las filas siguientes RunningTotal -= DeletedRow.Quantity!

Confiar en los ID de la tabla es probablemente una mala idea para esto, pero si así es como realmente se hace, podría intentar algo como esto (no probado):

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

Este tipo de solución solo funcionará si espera que solo necesite dos filas para igualar su suma objetivo. Dado que es muy probable que este no sea el caso, su mejor opción es intentar obtener todas las filas y hacerlo programáticamente en los datos devueltos.

La solución Running Total publicada por lc también es una buena opción, aunque generalmente trato de evitar almacenar datos calculados a menos que sea absolutamente necesario.


Según la información actualizada de esta solicitud, tengo una respuesta alternativa.

No parece que te importe el inventario. Te importa más cuando llegaron los productos.

SELECT *
  FROM product
 ORDER BY product.receivedData

Procese cada registro a medida que entran, almacene el precio de ese registro y continúe durante el tiempo que sea necesario hasta que alcance la cantidad de artículos que necesita. Debería terminar con una lista de artículos, la cantidad de inventario en ese nivel y el precio en ese nivel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top