Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Zapis w postaci 10E2
slawek3422
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


Witam.
Czy jest jakiś sposób na zapisanie w bazie MySQL wartości w postaci 10E2. Jaki typ danych wybrać ? Nie chodzi mi o VARCHAR dlatego, że w przypadku gdy wybieram z dwóch wierszy (5E2, 3E7) wartość najmniejszą MIN () to w wyniku dostaję 3E7 co jest błędem. Z kolei jeżeli jako typ wybieram INT to przy zapisie 3E4 MySQL konwertuje wartość i wpisuje 30000 a ja potrzebuje zapis bez konwersji i dodatkowo żeby poprawnie działały funkcje MAX i MIN ...

Już się pogodziłem z faktem, że musi zostać INT i później w PHP będzie zabawa ze zmianą na zapis z E, ale postanowiłem jeszcze zapytać fachowców smile.gif

Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ok nie jest to najwydajniejsze rozwiązanie ale w sumie czemu nie smile.gif

Robisz normalnie tabelkę z polami VARCHAR - nic prostszego - zapisujesz do nich sobie te wartości wprost jako na przykład '2.8E3' smile.gif

Następnie przy zapytaniach używaj funkcji CAST():
(założmy że pole "liczba" ma zapisaną wartość '2.8E3')
  1.  
  2. SELECT CAST(liczba AS decimal) AS liczba FROM (...) -- zwróci nam 2800 czyli to co trzeba
  3.  
  4. SELECT MAX(CAST(liczba AS decimal)) AS max_liczba FROM (...)
  5.  
  6. SELECT (...) FROM (...) ORDER BY CAST(liczba AS decimal) ASC
  7.  
  8. -- i tak dalej...
  9.  


Po problemie wink.gif

Swoją drogą to nietypowe rozwiązanie ale napewno zadziała wink.gif

Ten post edytował Sephirus 1.02.2012, 15:44:05


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Crozin
post
Post #3





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

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


12604443 to liczba, 0xC0541B(16), 060052033(8), 1.2604443E7, 12604443 czy 1DNIH3(24) to format zapisu. Jedno i drugie nie ma ze sobą nic wspólnego.

Komputer zawsze powinien przechowywać i operować na "czystych" liczbach, dopiero w momencie wyświetlania danych użytkownikowi następuje zamiana liczby na tekst (12604443 -> "12604443") oraz ewentualne sformatowanie (12604443 -> "0xC0541B") tejże liczby. Każde inne podejście jest złe.*

* Nie potrafię sobie w tej chwili wymyślić sensownego przypadku gdzie użycie "formatu" byłoby uzasadnione.
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie lepiej zapisywać to do postaci dwóch kolumn? Jedna, to podstawa, druga - mnożnik.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
slawek3422
post
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


Cytat(erix @ 1.02.2012, 16:12:49 ) *
A nie lepiej zapisywać to do postaci dwóch kolumn? Jedna, to podstawa, druga - mnożnik.


No tak też zrobię, będzie najprościej i bez zbędnego kombinowania jak koń pod górkę.

Dziękuję za odpowiedzi.
Temat do zamknięcia.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 19:50