Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie danych z bazy po wartościach wyliczanych w locie w PHP
polm83
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.10.2004

Ostrzeżenie: (0%)
-----


Witam.
Mam taki problem.
Istnieje tabela z fakturami, gdzie przy listowaniu tych faktur obliczam dla nich szacowane odsetki za pomocą wzorów w PHP.
I tutaj potrzebowałbym rozwiązania na posortowanie tych faktur po wartości wyliczonych odsetek.
Chciałbym uniknąć sortowania w PHP, podobnie jak tworzenia kolumny w której bym przechowywał przeliczone odsetki i według niej następnie sortował.
Jednym słowem jak najmniej ingerencji w silnik PHP i baze MySQL (IMG:style_emoticons/default/smile.gif) .
Ale wydaje mi się, że jednak bez tego się nie obejdzie (IMG:style_emoticons/default/sad.gif) .
Może istnieje jakaś konstrukcja zapytania SQL wstawiająca sztucznie w locie dodatkową kolumnę z przypisanymi wartościami odsetek dla każdej z faktur.

Z góry dzięki za odpowiedź.
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. SELECT * FROM TABELA ORDER BY (twoje_wyliczenia)

Ale będzie to strasznie nie wydajne. O wiele lepsze jest stworzenie dodatkowej kolumny i założyć na nią po prostu indeks.
Go to the top of the page
+Quote Post
polm83
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.10.2004

Ostrzeżenie: (0%)
-----


Takim zapytaniem to raczej tego nie rozwiąże, ponieważ tabela w htmlu wygląda mniej więcej tak:

Klucz | Numer faktury | data platnosci | odsetki
00023 | 323232323223 | 2011-03-03 | 123zl
00123 | 32323jhhhj223 | 2011-05-03 | 13zl
.
.
.


gdzie pierwsze 3 kolumny to dane z SQLa a 4ta to wyliczenia w PHP.
Z pierwszymy mogę dać:
  1. SELECT * FROM faktura ORDER BY data_platnosci

ale jak posortować po odsetkach?
Ogólnie to ilość rekordów branych do sortowania nie będzie duża około 200,
więc mogę pobrać te 200 wierszy, dla każdego obliczyć odsetki i posortować.
Tylko jak przypisać w locie do zapytania, że klucz 00023 ma odsetki 123zl, 00123 13zł, itd.
Chyba jednak pozostaje mi dorzucić kolumnę, ale to spowoduje, że codziennie trzeba by ją przeliczać, a to by był dodatkowy czas (IMG:style_emoticons/default/smile.gif) , podobnie jak dodanie sortowania w php.
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(polm83 @ 23.06.2011, 22:31:06 ) *
Chyba jednak pozostaje mi dorzucić kolumnę, ale to spowoduje, że codziennie trzeba by ją przeliczać, a to by był dodatkowy czas (IMG:style_emoticons/default/smile.gif) , podobnie jak dodanie sortowania w php.

Codziennie odpalisz plik cronem, jaki problem?
Go to the top of the page
+Quote Post
polm83
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.10.2004

Ostrzeżenie: (0%)
-----


I to chyba będzie jedyne słuszne wyjście.
A ale tak z drugiej strony to jestem ciekawy czy takie rozwiązanie jest w ogóle możliwe?
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Na jakiej zasadzie wyliczane są odsetki? Jeżeli jedynym kryterium owych odsetek jest cena produktu i data płatności to bez problemu możesz dodać jakieś zadanie w systemie by codziennie o północy odpalony był jakiś program, aktualizujący dane w bazie. Jednak jeżeli tych danych do posortowania będzie niewiele - w okolicach 200 jak piszesz - nawet i bez indeksu powinno to działać wystarczająco szybko.
Go to the top of the page
+Quote Post
rollen
post
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 6
Dołączył: 24.06.2011

Ostrzeżenie: (0%)
-----


A może skożystaj z tabeli tymczasowej...


  1.  
  2. DROP TABLE IF EXISTS tbodsetki;
  3.  
  4. CREATE TEMPORARY TABLE tbodsetki AS
  5. SELECT *, (wyliczenia) AS odsetki
  6. FROM TABELA;
  7.  
  8.  
  9. ALTER TABLE tbodsetki ADD KEY (odsetki);
  10.  
  11. SELECT * FROM tbodsetki ORDER BY odsetki;
  12.  


Unikasz tworzenia jakiś zadań w cronie. Dane masz zawsze aktualne.

Dodatkowo definicję tabeli tbodsetki możesz zredukować do:
  1. CREATE TEMPORARY TABLE tbodsetki AS
  2. SELECT Klucz, [i]wyliczenia[/i] AS odsetki
  3. FROM TABELA;
  4.  
  5. ALTER TABLE tbodsetki ADD UNIQUE (odsetki);
  6.  


A w zapytaniu pobierającym dane możesz zjoinować tbodsetki z TABELA using klucz...

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 18:09