Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Porównania wpisów
Forum PHP.pl > Forum > Przedszkole
gebp
Tak więc wszys... no większość wie że W PHP:
  1. <?php
  2. kot==KOT  // true
  3. kot===KOT // false
  4. ?>


Chciałem zapytać, ponieważ bardzo słabiutko znam MySQL, czy w zapytaniach do bazy da się uzyskać porównanie "dokładne" jeżeli chodzi o ciągi tekstowe, czy lepiej kombinować:
1. z wyrażeniami regularnymi w zapytaniach MySql
2. sprawdzić w PHP pobrane wyniki na okoliczność "dokładnego" (z uwzględnieniem wielkości liter) porównania

A może ja nie potrafię znaleźć odp. ?
Grzyw
Co rozumiesz pod pojęciem porównań dokładnych? Masz zestaw funkcji w MySQL, które załatwią część operacji. Typu ucięcie białych znaków, zmiana wszystkich liter na małe ITP.
Przykład pierwszy z brzegu:
  1. lower('kot')=lower('KOT')
gebp
Przepraszam jeśli się nie dokładnie wyraziłem.
tak więc:
  1. <?php
  2. $imie="ToM";
  3. $sql=" SELECT `ID` FROM `tabela` WHERE `imie` LIKE '$imie' ";
  4. $q=mysql_querry($sql);
  5. $res=mysql_fetch_array($q);  // w odpowiedzi dostane  Array( 0=>"TOM', 1=>"tom", 2=>"TOm" ... ect. )
  6. ?>


Ja potrzebuje w w/w zapytaniem znaleźć ID tak by był spełniony warunek że taki by "ToM" === "ToM" a nie "tom" i "toM" lub "TOm" itd, czyli by szukana dana była dokładnie taka sama ( co do wielkości , ilości ect w tym przypadku liter).
zulus
To po co Ci LIKE?

Nie lepiej:
  1. <?php
  2. `imie`= ''' . mysql_real_escape_string($imie) . '''
  3. ?>


(to funkcja będzie dodatkową ochroną przed SQL Injection winksmiley.jpg)
gebp
No dobra to może tak:
w bazie w tabeli mam:
  1. id imie
  2. 1 TOM
  3. 2 TOm
  4. 3 Tom
  5. 4 tom
  6. 5 toM
  7. 6 tOM
  8. 7 ToM
  9. 8 tOM


Jak zapisać polecenie
  1. SELSECT `id` FROM `tabela` WHERE `imie`='$imie'

tak aby w wyniku otrzymać że pasujący rekord (id) równa się 4 (id=4) oczywiście mając dane $imie==="tom"
zulus
No to właśnie to zrobiłeś tongue.gif zmień tylko na SELECT
Pilsener
Wydaje mi się, jak ustawisz odpowiednią właściwość dla pola tekstowego czy tabeli - z tego co pamiętam, to chodzi o COLLATION czy coś takiego, tu masz pierwsze lepsze tematy na ten temat:
http://forum.php.pl/index.php?showtopic=41469
http://forum.php.pl/index.php?showtopic=96994
gebp
Znalzałem rozwiązanie ( tak jakby ktoś jeszcze szukał). U mnie przy kodowaniu bazy i połączeń ustawionym na "utf8_unicode_ci" działa.
Odnosząc się do przykładu wyżej zapytanie wygląda następująco:
  1. SELECT `id` FROM `tabela` WHERE BINARY `imie` LIKE 'ToM'
  2. // odp id=7
decha-design
ale z samym = powinno dzialać

  1. SELECT `id` FROM `tabela` WHERE `imie`='$imie'
... =o
erix
A czy Ci sprawdzi wielkość liter we wzorcu? Przy _ci nie.
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.