Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukiwarka po tagach i tytułach artykułów
adbacz
post 7.05.2014, 14:42:48
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
sebek222
post 10.05.2014, 13:45:12
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 4
Dołączył: 1.09.2010

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował sebek222 10.05.2014, 13:48:58
Go to the top of the page
+Quote Post
adbacz
post 12.05.2014, 11:33:03
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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


Ten post edytował adbacz 12.05.2014, 11:33:47
Go to the top of the page
+Quote Post
Turson
post 12.05.2014, 11:41:21
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


może spróbuj LEFT JOIN `tags`...
Go to the top of the page
+Quote Post
adbacz
post 12.05.2014, 12:41:07
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


Tak, LEFT JOIN pomogło. Dziękuję za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 06:50