Selamlar,

İstediğin gibi bir şey MySQL'de bir fonksiyon içerisinde sonuçları bir tabloya yazdırıp daha sonra da o tabloyu okuyarak yaptırmak mümkün, ama benim hem sevmediğim hem de tercih etmediğim bir yöntem. Fonksiyonları sonuç olarak veri kümesi/tablo dönebilen daha gelişmiş veritabanlarında bunu bir fonksiyon ile yapmak veya recursive sorgu desteği olan bir veritabanında yapmak çok daha kolay olur.

İşine yarar ise aşağıdaki sorgu sana girdiğin elma sayısına göre hangi sepetten kaç adet gerekğini listeleyecektir. Recursive sorgu olmadığı için bunu MySQL'e yaptırmak için biraz arkadan dolaşmak gerekiyor.

Öncelikle katsayi_tablosu adında bir tablo oluşturuyoruz, bu tablo sadece 1,2,3,4... şeklinde sayı dizisi tutuyor.
mysql> select * from katsayi_tablosu;
+----+
| ks |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
+----+
23 rows in set (0.01 sec)
Bir de sepet tablosu var, ondaki veriler de aşağıdaki gibi.
mysql> select * from sepet;
+------+----------------+----------+
| id   | ad             | kapasite |
+------+----------------+----------+
|    1 | Küçük sepet    |        2 |
|    2 | Orta sepet     |        5 |
|    3 | Büyük sepet    |        8 |
+------+----------------+----------+
3 rows in set (0.00 sec)
Aşağıdaki sorgu içerisindeki @elma := 130 sayısını ihtiyaca göre değiştirerek kaç elma için kaç sepet gerektiğini bulabilirsin.
 SELECT id,
       ad,
       kapasite,
       Sum(adet)
FROM   (SELECT id,
               ad,
               kapasite,
               ks - @katsayi AS adet,
               @elma := @elma - ( ks - @katsayi ) * kapasite,
               @katsayi := ks
        FROM   (SELECT *
                FROM   sepet
                ORDER  BY kapasite ASC) s_sort,
               (SELECT ks
                FROM   katsayi_tablosu
                ORDER  BY ks ASC) k_sort,
               (SELECT @katsayi := 0,
                       @elma := 2) init
        WHERE  @elma > 0
               AND ( ( @elma >= ( ks - @katsayi ) * kapasite
                       AND @elma <= ( ks - @katsayi + 1 ) * kapasite )
                      OR ( @elma <= ( ks - @katsayi ) * kapasite ) )) hesaplama
GROUP  BY id
HAVING Sum(adet) > 0
ORDER  BY kapasite DESC;
Örneğin 130 elma için sonuç aşağıdaki gibi
+------+----------------+----------+-----------+
| id   | ad             | kapasite | Sum(adet) |
+------+----------------+----------+-----------+
|    3 | Büyük sepet    |        8 |        16 |
|    1 | Küçük sepet    |        2 |         1 |
+------+----------------+----------+-----------+
2 rows in set (0.00 sec)
43 elma için de aşağıdaki gibi
+------+----------------+----------+-----------+
| id   | ad             | kapasite | Sum(adet) |
+------+----------------+----------+-----------+
|    3 | Büyük sepet    |        8 |         5 |
|    1 | Küçük sepet    |        2 |         2 |
+------+----------------+----------+-----------+
2 rows in set (0.00 sec)
46 elma için
+------+----------------+----------+-----------+
| id   | ad             | kapasite | Sum(adet) |
+------+----------------+----------+-----------+
|    3 | Büyük sepet    |        8 |         5 |
|    2 | Orta sepet     |        5 |         1 |
|    1 | Küçük sepet    |        2 |         1 |
+------+----------------+----------+-----------+
3 rows in set (0.00 sec)
İyi çalışmalar.



UlusLab adlı üyeden alıntı: mesajı görüntüle
Merhaba,


--------------------------------
MySQL Tablosu
id: 1
ad : Küçük Sepet
kapasite: 2
-----
id: 2
ad: Orta Sepet
kapasite: 5
-----
id: 3
ad: Büyük Sepet
kapasite: 8
----------------------------------


Düşünelim ki elimizde sepetlerimiz var ve bunlarında farklı kapasiteleri var. Mesela; Küçük Sepet 2 elma alıyor, Orta Sepet 5 elma alıyor, Büyük Sepet 8 elma alıyor.

Şimdi elimizde bir form var ve burada sadece ne kadar sepet ihtiyacımız olacağını bize sunacak. Bu formda sadece elma sayısını girdiğimiz bir input var.

Bu inputa ne sayı girersek bu kadar elmayı hangi sepete sığdırabileceğimizi gösteriyor. where sorgusunda where($kapasite, '>=', $elma_sayisi) şeklinde.

Benim istediğim sığmadığı sepetide kaç tane sepet gerekiyorsa göstermesi.
Mesela 4 elma girildiğinde sadece Orta ve Büyük sepetler olur diyor ama Küçük sepetten 2 tane diyede sonuca eklemesini istiyorum.

Bu sorguyu nasıl yaparım laravel kullanılmış php ile kapasite yetersizse daha fazla sepet seçmesinide sağlayabilirmiyim?

Umarım anlatabilmişimdir,
Teşekkürler iyi forumlar.