MySQL kayıtlarını seçmek olduğunu özetliyor

3 Cevap php

Ben MySQL ve PHP kullanıyorum. Ben sütunlar id ve miktarını içeren bir tablo var. Ben toplamı da 40 numaralı ulaştığında miktar toplamak için son bir satır kimliği almak istiyorum. Daha spesifik olmak gerekirse. Ben veritabanında 3. satırlar var. . Miktar 10, miktar 30 ve miktarı 20 ile biri ile biri ile tek ben sonucu 40 olması miktarlarda Özetle, ben ilk iki cadı özetlemek istiyorum Yani gelir:. 10 + 30 = 40 Bu şekilde, son kimliği olduğunu 40 numaralı özetlemek için kullanılan 2. Ben sadece 40 toplamını tamamlamak için kullanılan son satırın id bilmek istiyorum.

Sordu ben daha detaylı bilgi vermek istiyorum. TEŞEKKÜR EDERİZ!


Let me put it this way: I really have 6 products in my hand. The first one came to my possession on the date of 10, the next 3 came on the date of 11 and the last 2 came on 12.

Şimdi, benim stoktan 3 ürünlerini satmak istiyorum. Ve onlar geldi sırayla bunları satmak istiyorum. Yani 3 ürün isteyen müşteri için ona 11 geldi olanlardan 10 ve 2 ürün geldi ürün satmak istiyorsunuz.

2 ürünler istiyor sonraki müşteri için, ben, 12 olanlardan ona bir 3 ürünlerin son sipariş kalan 11 tarihinden itibaren ürünü ve başka bir satacaktır.

Soru nasıl hangi fiyat ben her ürün satmıştı bilemez mi? Ben her istenen miktar özetliyor hangi satırların öğrenebilirsiniz eğer, nerede toplamın Ben bir siparişi teslim etmek istediğiniz her zaman başlayacağımı bilmiyorum düşündüm. Bu yüzden ilk ben satır 3 ürün özetliyor hangi bakmak ve giriş id devam edecek. Sonraki sipariş için ben bu kimlikten gelen sayımı başlatmak ve böylece 2 ürün ve ikinci sırasını özetliyor kadar özetlemek istiyorum. Ben bu şekilde, ben her ürün vardı gelen fiyatlarının takip edebilirsiniz düşündüm. Yani ilk fiyatları kullanarak yapılmış bir fiyata 12 tarihinden itibaren ürünlerini satmaz.

Umarım anlarsın. Ben sadece ilk ürünler bir fiyata sahip olacağını bilemez ama ürün fiyatları yükseltir gibi, benim de fiyatları yükseltmek gerekir bu yüzden benim herhangi bir üründe ne vardı fiyat bilmek gerekir ... Yani gelen son ürünler için satılan olmalıdır daha yüksek bir fiyat. Ben bu takip eğer ben sadece elde edebilirsiniz ...

Çok teşekkür ederim.


Kimse? Veya daha kolay: MySQL (quantity) yüksek ya da örneğin 40 ile eşit olması için SUM için gerekli satırları seçmelisiniz. Ve sonra bana toplamı sürecinde katılan son satırın kimliği almak için.

3 Cevap

Ben çok iyi Sorunuzu anlamıyorum. Daha düzgün rewording deneyebilir miyim? Ben yorumlamak ne, burada veritabanı yapısı bulunuyor:

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

Şimdi "nasıl which fiyat ben satılan her ürün vardı bilemez", soruyorsun? Hangi veritabanında her bir değeri yok fiyat özniteliği beri sorta, beni karıştırıyor. Veritabanı bu gibi bakmak gerekir:

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

Şahsen, ben satılan fiyatını öğrenmek için fikir kusurlu olduğunu düşünüyorum. Bu veritabanı için bir kaç daha fazla alan eklemek daha mantıklı olur:

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

Veritabanı değişen, kolayca bir ürün geldiğinde izleyebilirsin, satılan tarih, fiyatı, belki miktar (ben söyleyemem eğer onun gerçek bir alanı ya da değil).

Ayrıca, basitleştirmek ve hatta sql sorguları, ya da sizin için bazı iş yapmak için bazı kod ekleyerek ayırarak hayatınızı kolaylaştırabilir.

Çalışan toplam ile üçüncü sütun var. Sonra sadece toplam <= hedef değer çalışıyor son satırı dönebilirsiniz.

Yani tablo gibi görünmelidir:

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

Not: Tabloda bir satırı silerseniz, sonraki tüm satırları güncelleştirmek için hatırlamak RunningTotal -= DeletedRow.Quantity!

Masa kimlik numarası dayanarak muhtemelen bu kötü bir fikir olduğunu, ancak bu gerçekten nasıl yapılır ise, böyle bir şey (test değil) deneyebilirsiniz:

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

Lütfen yalnızca hedef toplamına eşit hiç iki satır gerekir bekliyor eğer bu tür bir çözüm sadece çalışacaktır. Bu büyük olasılıkla değil durumda olduğundan, en iyi bahis denemek ve tüm satırları almak ve döndürülen veri bu programaticly yapmak için muhtemelen.

Genellikle ben kesinlikle mecbur olmadıkça hesaplanan veri depolamak önlemek için deneyin rağmen lc tarafından yayınlanmıştır Running Toplam çözüm de iyi bir seçenektir.


Bu istek güncellenmiş bilgilere dayanarak, ben alternatif bir cevabım var.

Eğer envanter umurumda gibi o kadar çok gelmiyor. Sen ürünler geldiğimde daha fazla özen

SELECT *
  FROM product
 ORDER BY product.receivedData

Süreç onlar geldikleri gibi, bu kayıt için fiyat saklamak ve sürece size ihtiyacınız öğelerin sayısını ulaşana kadar size ihtiyacınız olan için gidiyorsun tutmak her kaydı. Öğeler, bu düzeyde envanter numarasına ve bu düzeyde fiyat listesi ile bitmelidir.