Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie danych z bazy po wartościach wyliczanych w locie w PHP
Forum PHP.pl > Forum > Bazy danych > MySQL
polm83
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 smile.gif.
Ale wydaje mi się, że jednak bez tego się nie obejdzie 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.
wookieb
  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.
polm83
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 smile.gif, podobnie jak dodanie sortowania w php.
Fifi209
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 smile.gif, podobnie jak dodanie sortowania w php.

Codziennie odpalisz plik cronem, jaki problem?
polm83
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?
Crozin
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.
rollen
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...

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.