Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: (PHP) 20.99 != 20.99 (MYSQL)
Forum PHP.pl > Forum > Bazy danych > MySQL
zflyk
Witam. Mam taki problem i nie mam pojęcia jak to zrobić. Otórz wykonuję zapytanie do bazy: SELECT cena FROM ........ WHERE cena='".$cena."' .......
Cena nie jest jedynym warunkiem, ale nie o to chodzi. Chodzi o to że w bazie znajduje się wartość np: 20.99 (typ kolumny to FLOAT(10,2)
na 100% jest tam ta wartość bo sprawdzałem. Przy wykonaniu zapytania $cena=20.99 a jednak MYSQL nie widzi podobieństwa i nie znajduje mi tej ceny. Wyświetlałem sobie tą $cena przed zapytaniem i jest poprawna. Inne wartość WHERE też są ok. Problem jest z ceną :/ POMOCY. Co zrobić żeby MYSQL porównał obie wartości poprawnie?

zapomniałem dodać że jesli w bazię będzie wartość 10.00 i taką samą chcemy porównać to ZNAJDZIE! więc
10.00 == 10.00
20.99 != 20.99 blinksmiley.gif sciana.gif
prgTW
  1. SELECT ... FROM ... WHERE cena = 20.99
  2. --a nie
  3. SELECT ... FROM ... WHERE cena = "20.99"

w koncu kolumna liczbowa a nie tekstowa, prawda ... wiec czemu liczba podana stringowo?
zflyk
Cytat(prgTW @ 11.11.2007, 02:05:55 ) *
  1. SELECT ... FROM ... WHERE cena = 20.99
  2. --a nie
  3. SELECT ... FROM ... WHERE cena = "20.99"

w koncu kolumna liczbowa a nie tekstowa, prawda ... wiec czemu liczba podana stringowo?

no pomysł niezły, ale niebardzo :/

  1. <?php
  2. $cena = 35.30;
  3. ?>

Update robi ok
  1. <?php
  2. $pytanie1 = @mysql_query("UPDATE gm_towary SET cena='".$cena."' WHERE id='1'");
  3. ?>

wpisuje 35.30

ale przy SELECT już nie.
  1. <?php
  2. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena='".$cena."'");
  3. ?>

czy w takiej postawi jak proponowałeś
  1. <?php
  2. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".$cena."");
  3. ?>

nic nie zwraca

Dla
  1. <?php
  2. $cena = 35.00; || $cena= 35.50
  3. ?>

jest OK i dla innych wartości po przecinku nie znajduje nic sad.gif
BaN
Możesz zastosować DECIMAL, a nie FLOAT. Problem z liczbami rzeczywistymi jest opisany w dokumentacji
prgTW
mozna CASTowac ale to juz mija sie z celem
zflyk
Dzięki za propozycje ale już sobie poradziłem. Przeglądając to forum natknąłem się na "zamienny sposób na ten problem. Koleś napisał że on zamienia kropki na spacje, więc poszedłem tym tropem. napisałem prostą funkcję która zamienia kropkę na spacje lub odwrotnie, sama sprawdza co ma zrobić i zamieniłem w bazie Float na Varchar smile.gif jest OK
Oto ta funkcja, może komuś się przyda:
  1. <?php
  2. function konv($string)
  3. {
  4. if (eregi('.', $string))
  5. {
  6. $string = str_replace(".", " ", $string);
  7. return $string;
  8. }
  9. elseif (eregi(' ', $string))
  10. {
  11. $string = str_replace(" ", ".", $string);
  12. return $string;
  13. }
  14. else return $string;
  15. }
  16. ?>
prgTW
Po co uruchamiać do tego wyrażenia regularne?
  1. <?php
  2. function konv($string){
  3. if(strpos($string, '.') !== false)
  4. return str_replace('.', ' ', &$string);
  5. else
  6. return str_replace(' ', '.', &$string);
  7. }
  8. ?>
zflyk
BO eregi troche kojarzę a strpos nie smile.gif więc dlatego
prgTW
Uuu Panie winksmiley.jpg to tak jakby nie wiedzieć jak włączyć komputer ale umieć napisać Windowsa w assemblerze tongue.gif
zflyk
Cytat(prgTW @ 11.11.2007, 23:59:08 ) *
Uuu Panie winksmiley.jpg to tak jakby nie wiedzieć jak włączyć komputer ale umieć napisać Windowsa w assemblerze tongue.gif


HEHEHE winksmiley.jpg
( a asemblera znam tongue.gif ale żeby winde w nim napisać to ohmy.gif ) można zamknąć temat bo małe OT zaczyna się robić.
orson
witam

Twoje zapytanie nadal wysyłało cenę jako tekst. Nie jest ważne jak jest zmienna w php inicjowana/jakiego jest typu. Masz:
Kod
"UPDATE gm_towary SET cena='".$cena."' WHERE id='1'"

a powinieneś mieć:
Kod
"UPDATE gm_towary SET cena=".$cena." WHERE id='1'"

czyli bez pojedynczych '

pozdrawiam
bugme
Cytat(orson @ 14.11.2007, 00:32:14 ) *
Nie jest ważne jak jest zmienna w php inicjowana/jakiego jest typu.


W tym wypadku jest ważne, bo konwersja float=>string (w php a nie mysql'u) jest powodem problemu.
Powinno być:
  1. <?php
  2. $cena = "35.30";
  3. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".$cena);
  4. ?>

albo:
  1. <?php
  2. $cena = 35.30; 
  3. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".sprintf("%01.2f",$cena));
  4. ?>


Z uwagami o apostrofach się zgadzam.
zflyk
Już próbowałem bez apostrofów, bo ktoś wcześniej o tym pisał, ten sam objaw.
  1. <?php
  2. $cena = "35.30";
  3. $pytanie2 = @mysql_query("SELECT cena FROM gm_towary WHERE cena=".$cena);
  4. ?>

tego też próbowałem i nic :/ Już sobie z tym poradziłem. Dzięki za odpowiedzi. Pozdr
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-2025 Invision Power Services, Inc.