Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka - pomoc i kilka pytań
Forum PHP.pl > Forum > Bazy danych > MySQL
deha21
Witam,
Robię prostą wyszukiwarkę która będzie przeszukiwała moją stronę. Chcę żeby szukała w tabelach 'news', 'articles', 'pages' po polu 'title' oraz 'tag' i dobierała wyniki wg trafności - wiem, że taki algorytm będzie skomplikowany ale na początek może być coś takiego, że załóżmy wpisuje "mercedes 124" to w pierwszej kolejności wypisuje mi strony które w title mają te dwa wyrażenie, następnie strony które w tagu mają te dwa wyrażenie, a potem strony które w title mają tylko jedno wyrażenie, i na końcu strony które w tagu mają jedno wyrażenie winksmiley.jpg No i generalnie wyświetlało wg daty (im nowsze tym wyżej).

Na razie mam takie coś:
  1. $s=$_GET['s'];
  2. if(!isset($s)) {
  3. echo "<form method='GET' action=''>
  4. Szukaj:<input type='text' name='s'>
  5. <input type='submit' value='Szukaj'>
  6. </form>";
  7. } elseif (isset($s)) {
  8. $result=mysql_query("SELECT id, title, textlead, date FROM news WHERE tag LIKE '%$s%' ORDER BY date DESC");
  9. while($row=mysql_fetch_array($result)) {
  10. echo "<b>".stripslashes($row['title'])."</b></br><br>
  11. <p>".$row['textlead']."</p>";
  12. }
  13. }


Póki co problem mam takie, że wpisując 'mercedes' wyskakują mi rekordy ale wpisując 'mercedes 124' już nie. W jednym z tematów na forum było rozwiązania tego problemu (explode i foreach) ale u mnie to nie działa :/

A czy może skorzystać w full text search? Macie może jakieś dobre linki żeby zorientować się w temacie? Szukałem ale albo są errory 404 albo coś czego kompletnie nie rozumiem winksmiley.jpg

Pozdrawiam
erix
Cytat
A czy może skorzystać w full text search?

Tak. O ile pamiętam, to zwracał dodatkowo trafność.
deha21
Poczytałem trochę o full text search ale nic mi nie wychodzi. Mam taki kod:
  1. $result=mysql_query("SELECT id, title, textlead FROM news WHERE match(tag) against('$s')");
  2. while($row=mysql_fetch_array($result)) {
  3. echo "<b>".stripslashes($row['title'])."</b><br>
  4. <p>".$row['textlead']."</p>";
  5. }

Gdzie $s to szukana fraza.

Trzeba było w bazie zaznaczyć jakie są kolumny FULLTEXT i zrobiłem tak jak było w pewnym artykule:
  1. $news="CREATE TABLE news(
  2. id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. title varchar(255) NOT NULL,
  4. date varchar(15),
  5. textlead text,
  6. textcontent text,
  7. tag text,
  8. FULLTEXT(title,tag,textcontent),
  9. PRIMARY KEY(`id`))";


Niestety wyskakuje błąd w pierwszej linii pierwszego kodu. Co robię źle?

EDIT: Nie wiem czemu ale powyższy kod dodania FULLTEXTu nic nie dał i zrobiłem FULLTEXT ręcznie w phpMyAdmin. Tylko teraz jest taki problem że nie wyświetla mi wyników :/

EDIT2: Ok co nieco działa. Dodałem Boolena:
  1. $result=mysql_query("SELECT id, title, textlead FROM news WHERE match(tag) against('$s')");

Z tym, ze mam w tekście "Następcy Billa Gatesa" i gdy wpiszę Bill to chciałbym, żeby wyszkoczył właśnie ten wynik.

jak zwalidować formularz wyszukiwania, bo wpisując do niego, np.: <a href="#">asda</a>
wypisuje mi wszystkie wpisy jakie mam (a tam nawet nie ma tego <a href>).
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.