Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Błąd zapytania?
djgarsi
post 16.09.2010, 09:34:24
Post #1





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


Witam. Mam pewien problem z zapytaniem w wyszukiwaniu rekordów.
Mój kod:
  1. $search = htmlspecialchars($_POST['szukaj']);
  2. $zapytanie = "SELECT name FROM file WHERE MATCH(name) AGAINST('$search')";
  3. $final = mysql_query($zapytanie) or Die ("Nie działa zapytanie.");

No i właśnie jest ten ostatni komunikat.

Kod wziąłem ze strony http://ownpage.pl/php/wyszukiwarka-pelnote...-uzyciem-union/

Ten post edytował djgarsi 16.09.2010, 09:36:21


--------------------
Go to the top of the page
+Quote Post
wookieb
post 16.09.2010, 09:38:35
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




w DIE dodaj wywołanie mysql_error


--------------------
Go to the top of the page
+Quote Post
nospor
post 16.09.2010, 09:39:07
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zamiast: Die ("Nie działa zapytanie.");
wyswietl sobie blad zapytania. masz to opisane tu
Temat: Jak poprawnie zada pytanie


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
djgarsi
post 16.09.2010, 09:46:27
Post #4





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


No dobrze. Dodałem mysql_error i mam błąd treści: Can't find FULLTEXT index matching the column list


--------------------
Go to the top of the page
+Quote Post
wookieb
post 16.09.2010, 09:51:11
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No.. nie masz klucza pełnotekstowego na tym polu.
Przeczytaj dokładnie manuala dotyczącego FULLTEXT-a ponieważ używanie takiego indeksu wymaga umiejętności i wiedzy.


--------------------
Go to the top of the page
+Quote Post
djgarsi
post 16.09.2010, 09:59:52
Post #6





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


No dobrze. A czy jest jakiś inny sposób na szukanie w bazie danych na zasadzie:
- wpisuję frazę,
- nie znajduje całości frazy,
- wyświetla podobne rekordy.


--------------------
Go to the top of the page
+Quote Post
wookieb
post 16.09.2010, 10:01:05
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Fulltextem to zrobisz
Ale polecam inne silniki wyszukiwania typu Sphinx, Solr (Lucene). Niestety nie ma ich w standardowych hostingach.

Ten post edytował wookieb 16.09.2010, 10:02:09


--------------------
Go to the top of the page
+Quote Post
djgarsi
post 16.09.2010, 10:07:16
Post #8





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


A jest możliwość "rozbicia" frazy na słowa i szukania wg nich?


--------------------
Go to the top of the page
+Quote Post
wookieb
post 16.09.2010, 10:10:28
Post #9





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




W czym?


--------------------
Go to the top of the page
+Quote Post
djgarsi
post 16.09.2010, 10:12:27
Post #10





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


A np poleceniem explode.


--------------------
Go to the top of the page
+Quote Post
wookieb
post 16.09.2010, 10:15:04
Post #11





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No tak ale w czym? W zwykłej tabeli mysql za pomoca LIKE czy za pomoca FULLTEXT?


--------------------
Go to the top of the page
+Quote Post
djgarsi
post 16.09.2010, 10:16:33
Post #12





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


Tak, w zwykłej tabeli z LIKE. Każde słowo byłoby w LIKE.


--------------------
Go to the top of the page
+Quote Post
wookieb
post 16.09.2010, 10:21:32
Post #13





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Można. Tylko wiadomo... Fulltext jest bardziej zaawansowany i skuteczniejszy


--------------------
Go to the top of the page
+Quote Post
djgarsi
post 16.09.2010, 10:25:44
Post #14





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


Dobrze, teraz w praktyce.
Rozbiję frazę na słowa. Policzę wyrazy. Pętla for o długości liczby wyrazów.
I tu napotykam problem. Powtarzana będzie formuła OR 'słowo[i+1]'
Jak tą pętlę zgrać z zapytaniem?


--------------------
Go to the top of the page
+Quote Post
goran
post 17.09.2010, 13:40:48
Post #15





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 17.09.2010

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


  1. $e = explode(' ', $_POST['fraza']);
  2. if(is_array($e)) foreach($e as $value) $aE[] = 'name LIKE "%'.$value.'%"';
  3. if($aE) $query = 'SELECT * FROM file WHERE '.implode(' OR ', $aE);


Ale to marne rozwiązanie. LIKE jest powolne, a same wyniki nie będą zbyt dokładne. Załóż na pola po których wyszukujesz kluch fulltext'u.

Pozdr.
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.07.2025 - 14:33