Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka po tagach i tytułach artykułów
Forum PHP.pl > Forum > Bazy danych
adbacz
Chcę napisać wyszukiwarkę, która będzie wyszukiwała mi artykuły po ich tagach oraz tytułach. Użytkownik podaje (na przykłąd) 3 słowa w polu wyszukiwania, a ja chcę mu zwrócić listę artykułów, które pasują (względem tytułu i tagów artykułu) do zapytania. Dodatkowo, artykuły te są podzielone (przydzielone do) na różne działy strony, w ten sposób, że strona ma (załóżmy) 14 działów, i dany artykuł może być przypisany do wybranych 5 z nich.

Tabela publikacji
Kod
id | title | description | content | visibility


Tabela tagów
Kod
publication_id | tag


Tabela przypisania artykułu do działów strony
Kod
publication_id | section_id


Tabela części strony
Kod
id | name


Po podaniu przez użytkownika zapytania filtruje dane, a następnie rozdzielam tak, bym miał każde słowo w osobnym indeksie tablicy.

Jak napisać zapytanie, które zwróci mi artykuły, których tytuł lub tagi pasują do zapytania użytkownika? Dodatkowo muszę pobrać tylko te artykuły, które należą do wybranego wcześniej działu strony (ID działu przechowywane w stałej).
sebek222
  1. SELECT p.`title`, p.`content` FROM `PUBLICATION` p JOIN `TAG` t ON p.`id`=t.`publication_id` JOIN `SECTION` s ON s.`publication_id`=p.`id` WHERE s.`section_id`=[id_dzialu] AND (t.tag LIKE '%user_string%' OR p.`title` LIKE '%user_string%' ) LIMIT 100;

, gdzie user_string to dane wpisane przez użytkownika,
PUBLICATION to tabela z artykułami,
TAG to tabela z tagami,
SECTION to tabela z działami.
adbacz
Dziękuję CI bardzo za odpowiedź, niestety mam problem. Jeśli wyszukuję część tytułu, ale nie ma tego w tagach artykułu, to nic mi nie wyszukuje, ale jesli tylko usunę JOIN tabeli TAGS to wyszukuje bez problemu tą samą frazę.

Aktualne zapytanie do DB wygląda w ten sposób:
  1. SELECT p.*
  2. FROM `publication` p
  3. JOIN `tags` t
  4. ON p.`id_publication` = t.`element_id`
  5. JOIN `publication_segments` s
  6. ON s.`publication_id` = p.`id_publication`
  7. WHERE
  8. s.`segment_id` = 6
  9. AND ( t.tag = 'zumby' OR p.title LIKE '%zumby%' )
  10. ORDER BY p.add_date ASC
  11. LIMIT 100
Turson
może spróbuj LEFT JOIN `tags`...
adbacz
Tak, LEFT JOIN pomogło. Dziękuję za pomoc.
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.