Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie LIKE
Forum PHP.pl > Forum > Bazy danych > MySQL
djgarsi
Witam. Jak w temacie, potrzebuję zapytania, które wyświetli mi którekolwiek ze słów podanych przez użytkownika.
Prosze o pomoc.
phpion
Podziel wpisana frazę po spacji (explode) i dynamicznie zbuduj zapytanie na zasadzie:
WHERE (pole LIKE slowo1 OR pole LIKE slowo2 ...)
djgarsi
mam rozumieć że tym się kierowaćquestionmark.gif
  1. $fraza = "wyraz1 wyraz2 wyraz3 wyraz4";
  2. $zmienna = explode(" ", $fraza);
  3. echo $zmienna[0];
  4. echo $zmienna[1];
phpion
Tak.
djgarsi
Ok. Z pojedynczym wyświetlaniem sobie poradziłem. Teraz jest problem taki, że nie wiem jak wyświetlić pojedynczo słowa z formularza.
Mój kod to:
  1. <?php
  2.  
  3. echo'<form action="" method="POST">
  4. <input type="text" name="szukaj"> <input type="submit" value="Ok">
  5. </form>';
  6.  
  7. $fraza = $_POST["szukaj"];
  8. $zmienna = explode(" ", $fraza);
  9.  
  10. $ile = str_word_count($fraza);
  11. echo 'Tekst '.$fraza.' zawiera '.$ile.' slow';
  12. echo ' Oto i one: ';
  13. for ($i = 0; $i = $ile; $i=$i+1) {
  14. echo $zmienna[$i];
  15. }
  16. ?>

Niestety pętla pokazuje tylko ostatnie słowo nieskończoną ilość razy.
mkozak
Jeżeli to jest jedno pole w którym szukasz np.: tabela z newsami ma pole news_tresc, to zrób na niej full text index

  1. ALTER TABLE `news` ADD FULLTEXT (
  2. `news_tresc`
  3. )

a wyszukaj tak:
  1. SELECT *
  2. FROM `news`
  3. WHERE MATCH (
  4. `news_tresc`
  5. )
  6. AGAINST (
  7. 'slowo1 slowo2 slowo3'
  8. )


  1. <?php
  2. echo'<form action="" method="POST">
  3. <input type="text" name="szukaj"> <input type="submit" value="Ok">
  4. </form>';
  5. $fraza = $_POST["szukaj"];
  6.  
  7. $zmienna = explode(" ", $fraza);
  8.  
  9. echo 'Tekst '.$fraza.' zawiera '.$ile.' slow';
  10. echo ' Oto i one: ';
  11. foreach ( $zmienna as $slowo) {
  12. echo $slowo;
  13. }
  14.  
erix
Zobacz sobie, jak ma wyglądać for, bo to elementarny błąd.
krispak
Dokladnie zrob to w foreach lub jak juz chcesz w for to zmien $i = $ile na $i < $ile
djgarsi
No ok. Oddzielenie słów już mam. Tylko teraz jak to do zapytania dac żeby szukało dla ktoregokolwiek ze słów.sad.gif
krispak
  1. $warunki=" (Tytul LIKE '%$zmienna[0]%')";
  2. for ($i=1;$i<count($zmienna);$i++)
  3. {
  4. $warunki.=" or (Title LIKE '%$zmienna[$i]%')";
  5. }
  6.  
  7. $sql = mysql_query("SELECT * FROM costam WHERE ".$warunki."");
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.