سؤال

أنا أستخدم MySQL وPHP.لدي جدول يحتوي على معرف الأعمدة والكمية.أرغب في استرداد معرف الصف الذي هو آخر كمية يتم جمعها عندما يصل إلى الرقم 40 عند المجموع.لنكون أكثر تحديدا.لدي 3 صفوف في قاعدة البيانات.واحدة بالكمية 10، واحدة بالكمية 30 وواحدة بالكمية 20.لذا، إذا قمت بجمع الكميات للحصول على النتيجة 40، فسأجمع أول معنيين:10 + 30 = 40.بهذه الطريقة، آخر معرف يتم استخدامه لجمع الرقم 40 هو 2.أريد فقط معرفة معرف الصف الأخير المستخدم لإكمال مجموع 40.

وسأقدم المزيد من التفاصيل إذا طلب منك ذلك.شكرًا لك!!


اسمحوا لي أن أطرح السؤال بهذه الطريقة:لدي بالفعل 6 منتجات في يدي.أول واحد جاء في حوزتي في تاريخ 10، وجاءت الثلاثة التالية في تاريخ 11 وآخر 2 جاء في تاريخ 12.

الآن، أريد بيع 3 منتجات من مخزوني.ونريد بيعها بالترتيب الذي أتت به.لذلك بالنسبة للعميل الذي يريد 3 منتجات، سأبيع له المنتج الذي جاء في 10 ومنتجين من المنتجات التي جاءت في 11.

بالنسبة للعميل التالي الذي يريد منتجين، سأبيع له منتجًا واحدًا من تاريخ 11 متبقيًا من الطلب الأخير المكون من 3 منتجات، ومنتجًا آخر من المنتجات الموجودة في 12.

السؤال هو كيف أعرف سعر كل منتج قمت ببيعه؟اعتقدت أنه إذا تمكنت من معرفة الصفوف التي تلخص كل الكمية المطلوبة، فسأعرف من أين أبدأ المجموع في كل مرة أرغب في تسليم طلب.لذا أولاً سأبحث عن الصفوف التي تلخص 3 منتجات وأحتفظ بمعرف الإدخال.بالنسبة للطلب التالي، سأبدأ العد من هذا المعرف وأجمعه حتى يجمع الطلب الثاني لمنتجين وهكذا.اعتقدت أنه بهذه الطريقة، يمكنني تتبع الأسعار الواردة لكل منتج.لذلك لن أبيع المنتجات من تاريخ 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، أو حتى إضافة بعض التعليمات البرمجية للقيام ببعض الأعمال نيابةً عنك.

نصائح أخرى

ويكون العمود الثالث بمجموع التوالي. بعد ذلك يمكنك ببساطة العودة الصف الأخير حيث مجموع تشغيل <= القيمة التي تستهدفها.

وهكذا الجدول الخاص بك يجب أن تبدو:

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

ملحوظة: إذا قمت بحذف صف في الجدول، وتذكر لتحديث كافة الصفوف اللاحقة RunningTotal -= DeletedRow.Quantity

والاعتماد على الجدول ID من المحتمل ان يكون فكرة سيئة لهذا، ولكن إذا كان هذا هو كيف يتم ذلك حقا، قد تتمكن من محاولة شيء من هذا القبيل (لم تختبر):

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

وهذا النوع من الحل تعمل فقط إذا كان لديك تتوقع أن تحتاج صفين فقط من أي وقت مضى إلى ما يعادل المبلغ المستهدف. لأن هذا هو الأرجح ليس هو الحال، وأفضل رهان هو على الارجح لمحاولة الحصول على كافة الصفوف والقيام بذلك programaticly على البيانات التي تم إرجاعها.

والحل الكلي تشغيل المرسلة بواسطة قانون العمل هو أيضا خيارا جيدا على الرغم من أنني عادة في محاولة لتجنب تخزين البيانات المحسوبة ما لم يكن لدي على الاطلاق ل.


واستنادا إلى المعلومات التي تم تحديثها من هذا الطلب، لدي إجابة بديلة.

والأمر لا يبدو كثيرا مثلك يهتمون المخزون. يهمك أكثر حول متى جاءت المنتجات في.

SELECT *
  FROM product
 ORDER BY product.receivedData

وعملية كل سجل لأنها تأتي في، تخزين ثمن هذا السجل، والحفاظ على الذهاب لطالما كنت بحاجة إلى حتى تصل إلى عدد من العناصر التي تحتاج إليها. يجب أن ينتهي مع قائمة من البنود، وعدد من المخزون عند هذا المستوى والسعر عند هذا المستوى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top