mam tabelę:
Kod
+-----+---------+--------------+---------------+
| id | owner | name | value |
+-----+---------+--------------+---------------+
| 1 | 1 | cecha | 175 |
| 2 | 1 | max | 500 |
| 3 | 1 | przyrost | 100 |
| 4 | 2 | cecha | 475 |
| 5 | 2 | max | 550 |
| 6 | 2 | przyrost | 200 |
| 7 | 3 | cecha | 5000 |
| 8 | 3 | max | 1000 |
| 9 | 3 | przyrost | 250 |
+-----+---------+--------------+---------------+
I chciałbym teraz jednym zgrabnym zapytaniem do `cecha` dodać `przyrost` tak, żeby nie przekroczyć maks, a jednocześnie tak, by już po przekroczeniu `max` nie obniżać wartości rekordów dla danego owner. Brzmi zagmatwanie, więc podam oczekiwany rezultat:| id | owner | name | value |
+-----+---------+--------------+---------------+
| 1 | 1 | cecha | 175 |
| 2 | 1 | max | 500 |
| 3 | 1 | przyrost | 100 |
| 4 | 2 | cecha | 475 |
| 5 | 2 | max | 550 |
| 6 | 2 | przyrost | 200 |
| 7 | 3 | cecha | 5000 |
| 8 | 3 | max | 1000 |
| 9 | 3 | przyrost | 250 |
+-----+---------+--------------+---------------+
Kod
+-----+---------+--------------+---------------+
| id | owner | name | value |
+-----+---------+--------------+---------------+
| 1 | 1 | cecha | 275 | przyrost o 100; value = (175 + 100 < 500 => 275)
| 2 | 1 | max | 500 |
| 3 | 1 | przyrost | 100 |
| 4 | 2 | cecha | 550 | przyrost o 200; value = (475 + 200 > 550 => 550)
| 5 | 2 | max | 550 |
| 6 | 2 | przyrost | 200 |
| 7 | 3 | cecha | 5000 | przyrost o 250; value = (5000 > 1000 => 5000)
| 8 | 3 | max | 1000 |
| 9 | 3 | przyrost | 250 |
| 10 | 3 | jakas_dana | 521512512 |
+-----+---------+--------------+---------------+
Takie przeliczanie powinno być dla każdej unikalnej wartości pola "owner". Czyli: Jeżeli `cecha` + `przyrost` jest mniejsza od `max`, to `cecha` ma wartość tej sumy. Jeżeli `cecha` + `przyrost` jest większa od `max`, to `cecha` ma wartość `max`. Jeżeli jednak cała `cecha` jest większa od `max`, to wtedy pozostaje bez zmian. Rozumiecie o co mi chodzi? | id | owner | name | value |
+-----+---------+--------------+---------------+
| 1 | 1 | cecha | 275 | przyrost o 100; value = (175 + 100 < 500 => 275)
| 2 | 1 | max | 500 |
| 3 | 1 | przyrost | 100 |
| 4 | 2 | cecha | 550 | przyrost o 200; value = (475 + 200 > 550 => 550)
| 5 | 2 | max | 550 |
| 6 | 2 | przyrost | 200 |
| 7 | 3 | cecha | 5000 | przyrost o 250; value = (5000 > 1000 => 5000)
| 8 | 3 | max | 1000 |
| 9 | 3 | przyrost | 250 |
| 10 | 3 | jakas_dana | 521512512 |
+-----+---------+--------------+---------------+
