Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapytanie CONCAT nie działa
Forum PHP.pl > Forum > Przedszkole
szczalpi
Witam
Chcę użyć zapyatania do w mysql za pomocą CONCAT, niestety nie działa.
Nie wiem gdzie tkwi problem proszę o pomoc. Pozdrawiam
  1. SELECT * FROM users WHERE CONCAT(miasto, rodzaj_obiektu) LIKE '%".$pokaz."%'
Lysiur
składnia wygląda na poprawną, więc sprawdź lepiej, czy zmienna $pokaz zawiera to co powinna.
mmmmmmm
A któreś z pól nie jest Null?
szczalpi
Zapytanie działa tylko jest małe ale.
Nie znajduje całego wyrazu np: wpiszę poznań nie znajduje, wpiszę oznań i znajduje ?!
Nie wiem jak zrobić poprawnie like $pokaz
nospor
Bo może w bazie masz Poznań a nie poznań...
mar1aczi
Małe i duże literki mają znaczenie.
szczalpi
Tak. Mam duże i małe litery.
To w jaki sposób można zadać pytanie, aby dobrze szukało questionmark.gif?
nospor
mysql -> lower
matiit
Tylko najlepiej coś takiego:
  1. $pokaz = strtolower($pokaz);
  2. SELECT * FROM users WHERE CONCAT(LOWER(miasto), LOWER(rodzaj_obiektu)) LIKE '%".$pokaz."%'


Te 2 LOWER można złączyć w jeden...

Najlepiej jak obie części zapytania bedą sprowadzone do małych literek.
Problem będzie z wydajnością tego i... nie pamiętam jak jest z polskimi znakami w tym.

widziałem kiedyś lepsze rozwiązanie do tego. Poszukaj, to popularny problem.
szczalpi
  1. SELECT miasto,LOWER(miasto),tresc,LOWER(tresc) FROM kamery WHERE CONCAT(nr,miasto,tresc) LIKE '%$kamery%' ";

Takie zapytanie mam, ale nic to nie daje sad.gif.
Chcęaby znalazło, np: Rynek Poznań to nie znajduje, ynek już tak. Nie wiem czy CONCAT jest dobrym zapytaniem do łączenia kolumn ?
viking
Najlepiej ustawić COLLATE czyli zapytanie może wylądać .... LIKE cos COLLATE utf8_general_ci

"ci" oznacza case insensitive
"cs" case sensitive
nospor
WHERE CONCAT(nr,miasto,tresc)
Przecież nadal szukasz nie zmieniając na małe.... Owszem zmieniasz w SELECT, ale SELECT z WHERE nie ma nic wspólnego....szukasz w WHERE a nie w SELECT
szczalpi
Mam takie ostateczne zapytanie:
  1. $sql="SELECT * FROM kamery WHERE CONCAT(LOWER(miasto), LOWER(tresc)) LIKE '%".$kamery."%' ";

PRZYKŁAD:
- stary rynek znajduje
- stary lub rynek znajduje
- start rynek poznań lub stary poznań juz nie znajduje
Jak połączyć dwie kolumny, aby pokazywał wynik ?


Nic to nie daje
matiit
Dołącz spację pomiędzy miasto i treść. Bo chyba o to chodzi.
szczalpi
Nic to nie daje sad.gif
matiit
  1. $sql="SELECT * FROM kamery WHERE CONCAT(CONCAT(LOWER(miasto), ' '), LOWER(tresc)) LIKE '%".$kamery."%' ";


Chodziło mi o takie coś.
Wiem, że brzydko smile.gif
szczalpi
Nie działa.
  1. $sql="SELECT * FROM kamery WHERE CONCAT(CONCAT(LOWER(miasto), ' '), LOWER(tresc)) LIKE '%".$kamery."%' ";

Tak samo jak wyzej nie znajduje stary rynek poznan reszta ok.
matiit
hehe ok. Nie znajduje bo się kolejność nie zgadza...
Porównujesz "poznan stary rynek" do "%stary rynek poznan%" no i oczywiscie to jest false.
Rozwiązanie:

  1. $sql="SELECT * FROM kamery WHERE CONCAT(CONCAT(LOWER(miasto), ' '), LOWER(tresc)) LIKE '%".$kamery."%' OR CONCAT(CONCAT(LOWER(tresc), ' '), LOWER(miasto)) LIKE '%".$kamery."%' "


Oczywiście mozna to napisać ładniej i trochę przyspieszyć.
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.