Вопрос

Я использую MySQL и PHP. У меня есть таблица, которая содержит столбцы идентификатор и количество. Я хотел бы получить идентификатор строки, которая является последней суммой количества, когда она достигает числа 40 в сумме. Чтобы быть более конкретным. У меня есть 3 строки в базе данных. Один с количеством 10, один с количеством 30 и один с количеством 20. Поэтому, если я суммирую количества, чтобы получить результат 40, я бы суммировал первые два значения ведьмы: 10 + 30 = 40. Таким образом, последний идентификатор, который используется для суммирования числа 40 и 2. Я просто хочу знать идентификатор последней строки, которая используется для завершения суммы 40.

Я бы дал дополнительную информацию, если бы меня спросили. СПАСИБО !!

<Ч>

Позвольте мне сказать это так: У меня действительно есть 6 продуктов в моей руке. Первый поступил в мое владение 10-го числа, следующие 3 - 11-го, а последние 2 - 12-го.

Теперь я хочу продать 3 товара со своего склада. И хочу продать их в том порядке, в котором они пришли. Поэтому для покупателя, который хочет 3 продукта, я бы продал ему продукт, который пришел на 10, и 2 продукта из тех, что были на 11.

Для следующего покупателя, которому нужны 2 товара, я бы продал ему один товар с даты 11, оставшейся от последнего заказа из 3 товаров, и еще один из тех, что на 12.

Вопрос в том, как узнать, по какой цене продавался каждый продукт? Я подумал, что если я смогу узнать, какие строки суммируют каждое запрошенное количество, я буду знать, где начинать сумму каждый раз, когда я хочу доставить заказ. Итак, сначала я бы посмотрел, какие строки суммируют 3 продукта, и сохранил идентификатор записи. Для следующего заказа я бы начал подсчет с этого идентификатора и суммировал, пока он не суммирует второй заказ из 2 продуктов и так далее. Я думал, что таким образом я могу отслеживать входящие цены, которые были у каждого продукта. Поэтому я не буду продавать товары с даты 12 по цене, составленной с использованием первых цен.

Надеюсь, ты понимаешь. Мне просто нужно знать, по какой цене был какой-либо из моих продуктов, чтобы я знал, что у первых продуктов будет одна цена, но по мере повышения цен на продукты я тоже должен повышать свои цены ... Так что последние продукты, которые пришли, должны быть проданы за более высокая цена. Я могу добиться этого только в том случае, если буду следить за этим ...

Большое спасибо.

<Ч>

Никто? Или еще проще: MySQL должен выбрать необходимые строки, чтобы SUM (quantity) был выше или равен 40, например. А затем, чтобы получить идентификатор последней строки, которая участвовала в процессе суммирования.

Это было полезно?

Решение

Я не очень хорошо понимаю ваш вопрос. Можете ли вы попробовать переписать его более правильно? Насколько я понимаю, вот структура вашей базы данных:

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

Теперь вы спрашиваете, & "Как я узнаю, по какой цене был каждый проданный мной продукт?" Что сорта меня смущает, так как каждое значение в базе данных не имеет ценового атрибута. Разве ваша база данных не должна выглядеть так:

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

Лично я думаю, что ваша идея узнать цену продажи ошибочна. Было бы разумнее добавить еще несколько полей в вашу базу данных:

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        

Изменяя свою базу данных, вы можете легко отслеживать, когда товар прибывает, дату продажи, его цену, возможно, количество (я не могу сказать, является ли это фактическим полем или нет).

Кроме того, вы можете упростить и упростить свою жизнь, разделив запросы SQL или даже добавив некоторый код, чтобы выполнить часть работы за вас.

Другие советы

Иметь третий столбец с промежуточным итогом. Затем вы можете просто вернуть последнюю строку, в которой промежуточный итог & Lt; = целевое значение.

Итак, ваша таблица должна выглядеть так:

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

ПРИМЕЧАНИЕ. Если вы удалите строку в таблице, не забудьте обновить все последующие строки RunningTotal -= DeletedRow.Quantity!

Использование идентификаторов таблицы, вероятно, является плохой идеей для этого, но если это действительно так, вы можете попробовать что-то вроде этого (не проверено):

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

Этот тип решения будет работать только в том случае, если вы ожидаете, что вам понадобятся только две строки, чтобы равняться вашей целевой сумме. Поскольку это, скорее всего, не так, лучше всего попытаться получить все строки и сделать это программно на возвращаемых данных.

Решение «Итоговое значение», опубликованное lc, также является хорошим вариантом, хотя я обычно стараюсь избегать хранения вычисленных данных, если в этом нет необходимости.

<Ч>

На основании обновленной информации из этого запроса у меня есть альтернативный ответ.

Звучит не так, как будто ты заботишься об инвентаре. Вы больше заботитесь о том, когда поступят продукты.

SELECT *
  FROM product
 ORDER BY product.receivedData

Обрабатывайте каждую запись по мере ее поступления, сохраняйте цену этой записи и продолжайте столько времени, сколько вам нужно, до тех пор, пока не достигнете необходимого количества элементов. Вы должны получить список предметов, количество инвентаря на этом уровне и цену на этом уровне.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top