Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie liczb ujemnych w MySQL
Largo
post
Post #1





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


Witam,

Oto schemat bazy danych na dobry początek:

  1. CREATE TABLE ibf_fg_transactions
  2. (
  3. id int(10) NOT NULL AUTO_INCREMENT,
  4. sender_id int(10) DEFAULT '0',
  5. sender_fg decimal( 10, 2 ) DEFAULT '0.00',
  6. sender_ip varchar(15) DEFAULT '0.0.0.0',
  7. recipient_id int(10) DEFAULT '0',
  8. recipient_fg decimal( 10, 2 ) DEFAULT '0.00',
  9. is_system tinyint(1) NOT NULL DEFAULT '0',
  10. amount decimal( 10, 2 ) NOT NULL SIGNED DEFAULT '0.00',
  11. comment varchar(255),
  12. visible tinytint(1) NOT NULL DEFAULT '0',
  13. date int(10) NOT NULL,
  14. PRIMARY KEY( id )
  15. )


Problem leży w sortowaniu. Sortuję po dacie, po kwocie i po kim, czyli po nazwie użytkownika, a dokładnie odbiorcy, bo wysyłający to my. Po dacie i nazwie działa, ale po kwocie nie. Kwoty zapisuję zazwyczaj tylko jako dodatnie, ale postanowiłem, że systemowe będę zapisywał jako minusowe. I moje pytanie - jak stworzyć zapytanie, które będzie takie coś robiło lub jak zmienić schemat bazy danych?

Pozdrawiam,
Largo
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ges
post
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 22.02.2008

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


Dla takiego efektu to nie widze wogóle problemów...

Sortujesz tylko po KWOTA DESC zapisując zawsze tylko wartości dodatnie.

Minus ("-") przed liczbami musi się pojawić tylko dla użytkownika, ale nie bierze udziału w sortowaniu. Więc tak naprawdę do samego sortowanie używajcie tylko kwot dodatnich i po tym możecie sortować uzyskując powyższy efekt.

Jeśli chodzi o znak to właśnie bazowałbym na tym polu TYP, czyli w modelu MVC w widoku sprawdzasz czy transakcja wyświetlana jest typu USER_USER czy SYSTEM_MINS bądź może SYSTEM_PLUS i wtedy to już tylko jest logika widoku czy pokazać minusa czy nie.

W bazie byloby tak:

KWOTA TYP
____________________
300 USER_USER
250 SYSTEM_MINUS
200 SYSTEM_PLUS
100 USER_USER
50 SYSTEM_MINUS

Robisz wtedy tylko "ORDER BY KWOTA DESC" i masz przesortowane tak jak chciałeś.
Podczas wyświetlania w PHPie

foreach($transactions as $trans)
{
if($trans['typ'] == SYSTEM_MINUS) print "-";
print $trans['kwota'];
}

Kod oczywiście bardziej podglądowy niż do użycia. W bazie danych TYP proponowałbym jako ENUMa zrobić a zmienne w PHP define('').
Ale szczegóły implementacji już pozostawiam Wam (IMG:style_emoticons/default/smile.gif)

Wg mnie problem był poprostu źle wytłumaczony :]
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 22:47