Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwne zachowanie szukarki
Forum PHP.pl > Forum > PHP
bumfank
Witam serdecznie, sciagnalem skrypt wyszukiwarki z tutoriala ZEND`owego
iii dziala a zarazem nie dziala:

na stronie:

http://infoparty.pl/this.php - dziala
http://infoparty.pl/tracklist.php - nie dziala

wpiszcie np armin

mimo ze w obu miejscach kod jest praktycznie taki sam ( roznia sie tylko glowne ify z $c na $_POST ):


  1. <?
  2. if(!$c) { 
  3. ?>
  4. <form action="this.php?c=1" method=POST>
  5. <b>Find Results with: </b><br>
  6. Any of these words: <input type="text" length=40 name="any"> <br>
  7. All of these words: <input type="text" length=40 name="all"> <br>
  8. None of these words: <input type="text" length=40 name="none"> <br>
  9. <input type="submit" value="Search">
  10. </form>
  11. <? 
  12.  } else if($c) {
  13. include("include/config.php");
  14.  
  15.  if((!$all) || ($all == "")) { $all = ""; } else { $all = "+(".$all.")"; }
  16.  if((!$any) || ($any == "")) { $any = ""; } 
  17.  if((!$none) || ($none == "")) { $none = ""; } else { $none = "-(".$none.")"; }
  18.  $query = "
  19.  SELECT *,
  20. MATCH(`nazwa`) AGAINST ('$all $none $any' IN BOOLEAN MODE) AS `score` 
  21. FROM `tracklisty` 
  22.  WHERE MATCH(`nazwa`) AGAINST ('$all $none $any' IN BOOLEAN MODE) ORDER BY `score` DESC";
  23. $artm1 = MySQL_query($query);
  24. if(!$artm1) { 
  25.  echo MySQL_error()."<br>$query<br>"; 
  26. }
  27. echo "<b>Article Matches</b><br>";
  28. if(MySQL_num_rows($artm1) > 0) {
  29.  echo "<table>";
  30. echo "<tr><td>Score </td><td>Title </td><td>Body</td></tr>";
  31.  while($artm2 = MySQL_fetch_array($artm1)) {
  32. $val = round($artm2['score'], 2);
  33. $val = $val*10;
  34. echo "<tr><td>$val</td>";
  35. echo "<td>{$artm2['nazwa']}</td>";
  36. echo "</tr>";
  37.  }
  38. echo "</table>";
  39.  }
  40.  else { 
  41. echo "No Results were found in this category.<br>"; 
  42.  }
  43.  echo "<br>"; 
  44.  } 
  45.  
  46.  
  47. ?>


help? :-)
phpion
Wina leży zapewne w zapytaniu SQL. Korzystasz z indexów FULLTEXT, lecz wyszukiwanie z użyciem MATCH ... AGAINST spisuje się dobrze tylko przy większej ilości rekordów. Dla testu wywal:
  1. WHERE MATCH(`nazwa`) AGAINST ('$all $none $any' IN BOOLEAN MODE)

i równocześnie wyświetlaj 'score' dla każdego rekordu. W rezulatacie pewnie otrzymasz wszystkie wpisy z bazy danych i dla każdego score będzie wynosiło 0.
Poczytaj na mysql.com o FULLTEXTach; z tego co pamiętam był tam jakiś związek z występowaniem szukanej frazy w ponad 50% rekordów (coś takiego).
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.