Wpis z mikrobloga

Pytanie dot. #php: mam sobie tabelę w bazie danych, w której mam id rekordu i drugie pole z wartością liczbową. Dodając do siebie wartości z kolejnych rekordów otrzymujemy pewną sumę, a ja chcę poznać szybko id rekordu, przy którym suma przekroczy dany próg. Póki co pobieram wszystkie rekordy z bazy i wrzucam je w

foreach()
, ale zastanawiam się czy istnieje lepszy sposób.

#webdev #programowanie (tak, programowanie) #stackoverflow
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@rss: Jesli zawsze bierzesz rekordy w takiej samej kolejnosci to zrob sobie osobna kolumne w ktorej bedziesz trzymal sume kolumny liczbowej przy zalozeniu znanego sortowania.

Ze zrobieniem tego pojedynczym zapytaniem bedzie probolem, bo funkcja SUM dziala na zbiorze okreslonym przez WHERE i nie masz dostepnych dla IFow wyniku progresu tej funkcji - wywolujesz i dosatjesz SUM
  • Odpowiedz
@msq: z kolumną zawierającą sumę będzie problem, bo wartości będą się zmieniać, a bez sensu będzie za każdym razem przeliczanie wszystkich kolejnych rekordów. :/

Nie musi być na zapytaniu - mogę to nawet w PHP zrobić, ale czy istnieje jakaś metoda "bardziej optymalna".
  • Odpowiedz
@rss: Procedura Ci to zrobi, bedzie o tyle optymalniej ze nie bedziesz przesylal z bazy do aplikacji danych ktorych nei potrzebujesz - wszystko sie przemieli na miejscu i dostaniesz zbior wynikow.
  • Odpowiedz
@Legol: No jak @plushy napisal o 'running sum' to mi sie troche oswiecilo. Ale za kazdym razem kiedy musze skorzystac z partition by to musze zagladac do manuala albo do swojej bazy wiedzy bo to dla mnie wyspa odkrywana wciaz na nowo. Inna sprawa ze uzywam tego moze ze dwa razy w roku.....

Tak czy siak - dzieki :)
  • Odpowiedz