Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MYSQL] Wyszukiwarka
Forum PHP.pl > Forum > PHP
Reptile ReX
Chcę zrobić wyszukiwarkę, która wyświetla wpierw wyniki po title a potem po opisie.

Wydaje się proste:
  1. SELECT * FROM tabela WHERE MATCH (title,opis) AGAINST ('fraza')

Ale mam pewien problem ponieważ opis i title znajdują się w innych tabelach.

Jak się za to zabrać aby wyświetlić wpierw wyniki które posiadają frazę w title a potem te które posiadają frazę w opisie?

Proszę o pomoc.
pmir13
Jaka jest struktura tych tabel? Rozumiem, że masz oddzielone tytuły i opisy po to, by można było wstawiać różne opisy dla danego tytułu przez wielu użytkowników?
Czemu nie możesz po prostu użyć dwóch kolejnych zapytań, osobno dla tytułu i osobno dla opisu, skoro i tak php to potem wypluwa?
Reptile ReX
Jeżeli użyję po sobie 2ch zapytań to otrzymuję duplikaty, czyli niekiedy takie same wyniki ponieważ np fraza znajduję się w tytule i w opisie.
Ja nie wiem dlaczego jest title i opis w osobnych tabelach, bo tutaj chodzi o proste forum, ja tylko poprawiam wyszukiwanie po kimś.
PiterosWeb
musisz zastosować JOIN i ORDER BY w ten sposób chyba będzie najprościej.
pmir13
  1. SELECT * FROM tytuly WHERE MATCH ( title ) AGAINST ('fraza')
  2. SELECT * FROM tytuly LEFT JOIN opisy ON opis.idtytulu = tytuly.id
  3. WHERE MATCH (opisy.opis) AGAINST ('fraza') AND !MATCH ( tytuly.title ) AGAINST ('fraza')
Reptile ReX
Dzięki wielkie.

A teraz mam jeszcze jedno pytanie.

Chcę wyświetlić tylko 300 znaków opisu ale w taki sposób, aby wyszukiwana fraza (załóżmy niech to będzie $_GET['szukaj']) znajdowała się w tym okrojonym tekście.

Dokładniej:

Chcę wyciągnąć z bazy danych 300 znaków z pola opis w taki sposób, aby zawsze zawarta była w nim fraza z GET'a.

Czy jest to możliwe ? Jak się za to zabrać?

Ja osobiście pomyślałem o strpos i substr, ale jakoś nie mogę ułożyć sobie tego w głowie, dlatego proszę o ew. wskazówki, abym mógł wykonać coś takiego.

Pozdrawiam
pmir13
  1. $okrojonytekst = substr( $calytekst, strpos( $calytekst, $fraza ) - $znakowprzedfraza, 300 );

Reptile ReX
Dzięki
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.