Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyszukiwanie ze środka frazy
xSebaPL
post 13.02.2016, 19:44:39
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

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


Witam wszystkich, mam taki problem. Otóż podczas wpisania frazy wyszukiwania, trzeba wpisywać literkę po literce od początku. Nie można napisać tylko drugiego wyrazu albo tylko środka wyrazu, bo wtedy nie zadziała. Że np. fraza 'Kac Vegas', żeby wyszukać trzeba po kolei wpisywać k, a, c, (odstęp), v, e, g, a, s. Nie można np. wpisać frazy 'vegas' bo wtedy nie znajduje, tak samo nie można wpisać po prostu 'gas' ze słowa 'veGAS' bo też nie znajdzie. Więc czy moglibyście mi powiedzieć jak zrobić żeby wyszukiwało z dowolnego miejsca w wyrazie, albo w całej nazwie? Żeby nie trzeba było pisać od początku? Tak to wygląda aktualnie:
  1. $stmt = $db->prepare("SELECT NAME as movie FROM `movies` WHERE NAME LIKE ? ORDER BY movie");
  2.  
  3. $keyword = $keyword . '%';
  4. $stmt->bindParam(1, $keyword, PDO::PARAM_STR, 100);
  5.  
  6. $isQueryOk = $stmt->execute();
Go to the top of the page
+Quote Post
com
post 13.02.2016, 20:01:42
Post #2





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


no to dodaj jakiś payload i otocz go %
Go to the top of the page
+Quote Post
xSebaPL
post 14.02.2016, 01:40:43
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

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


payload ? Tak po polsku i na chłopski rozum prosiłbym wink.gif
Go to the top of the page
+Quote Post
com
post 14.02.2016, 02:18:52
Post #4





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


no fraze której potrzebujesz i ma tam być, zawsze można %% ale nie o to pytałeś chyba
Go to the top of the page
+Quote Post
xSebaPL
post 14.02.2016, 04:46:30
Post #5





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

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


Spójrz na kod ten funkcji:
  1. function searchForKeyword($keyword) {
  2. $db = getDbConnection();
  3. $stmt = $db->prepare("SELECT NAME as movie FROM `movies` WHERE NAME LIKE ? ORDER BY movie");
  4.  
  5. $keyword = $keyword . '%';
  6. $stmt->bindParam(1, $keyword, PDO::PARAM_STR, 100);
  7.  
  8. $isQueryOk = $stmt->execute();
  9.  
  10. $results = array();
  11.  
  12. if ($isQueryOk) {
  13. $results = $stmt->fetchAll(PDO::FETCH_COLUMN);
  14. } else {
  15. trigger_error('Error executing statement.', E_USER_ERROR);
  16. }
  17.  
  18. $db = null;
  19.  
  20. return $results;
  21. }


Aktualnie funkcja zwraca wszystkie rekordy zaczynające się na frazę(czyli zmienną $keyword), a mi chodzi o to żeby zwracała wszystkie rekordy które ogólnie zawierają tą fraze(zmienną $keyword). Rozumiesz mnie teraz?

Jak masz rekord o nazwie 'Kac', to aktualnie funkcja zwraca ten rekord tylko po wpisaniu 'k', 'ka', oraz 'kac', a ja chcę żeby zwracała też po wpisaniu 'ac', albo nawet samego 'a' albo samego 'c'. Rozumiesz?

Ten post edytował xSebaPL 14.02.2016, 04:47:24
Go to the top of the page
+Quote Post
BigPig
post 14.02.2016, 08:06:55
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

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


Kolega @com dobrze mówi, zamiast:

  1. $keyword = $keyword . '%';


Zrób:

  1. $keyword = '%' . $keyword . '%';


Musisz zainteresować się tym co oznacza znak '%'. W przypadku użycia LIKE w zapytaniu, oznacza ono dowolny ciąg znaków. Mając znak procentu tylko z tyłu, zapytanie zachowywało się tak jakby podana fraza ZAWSZE miała być początkiem wartości trzymanej w danym polu. Stąd te wyniki. Jak miałeś frazę 'Kac Vegas', to przy Twoim zapisie, zawsze było trzeba wprowadzić początek czyli 'Kac'. Wprowadź zmianę o, której napisałem i powiedz czy o to Ci chodziło.

Ten post edytował BigPig 14.02.2016, 08:09:35
Go to the top of the page
+Quote Post
com
post 14.02.2016, 15:07:05
Post #7





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


no to albo robisz tak jak napisał Ci jeszcze raz BigPig, albo szukasz dosłownie wszystko czyli %%
Go to the top of the page
+Quote Post
xSebaPL
post 14.02.2016, 21:04:39
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

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


Dzięki, po prostu nie zrozumiałem na początku co dadzą te %%, nie jestem za bardzo kumaty closedeyes.gif
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 Wersja Lo-Fi Aktualny czas: 24.04.2024 - 00:38