Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie po tagach, zawartości i tytule newsa.
tomusrydy
post 13.09.2014, 22:30:17
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.09.2014

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


Witam. MySQL to nie jest moja najlepsza strona, a potrzebuje połączyć w pewien sposób 3 tabele.

Otóż posiadam w bazie tabele:
- news ('news_id', 'news_title', 'news_content',...);
- tags('tag_id', 'tag_name');
- tag_links('tag_id', 'element_id', 'element_category')

Potrzebuję zapytania do tworzonej przeze mnie wyszukiwarki na stronie, które "wyciągnie" mi news_id po znalezieniu pewnej frazy w 'news_content', 'news_title' oraz 'tag_name' powiązanego 'tag_id'. Dla wyjaśnienia 'element_id' określa 'news_id' a 'element_category' określa fakt, że jest to news (gdy ma wartość 0).

Z wyciągnieciem z 'news_content' i 'news_title' nie miałem problemu, gorzej z tymi tagami. Oto moje aktualne zapytanie.
  1. SELECT `news_id` FROM `news` WHERE (`news_title` LIKE :q) OR (`news_content` LIKE :q) ORDER BY `news_addTime` DESC
Go to the top of the page
+Quote Post
nospor
post 15.09.2014, 08:17:34
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Poprostu dołączasz kolejne tabele, z ktorych chcesz wyciągnąć dane. Robisz to przypomocy np. LEFT JOIN - patrz dokumentacja mysql


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tomusrydy
post 18.09.2014, 18:05:04
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.09.2014

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


Dobra, to już sobie ogarnałem troche, ale mam trochę inny problem przy tej samej bazie. Otóż jak mam stworzyć polecenie, które wyszuka mi newsa z przynajmniej jednym takim samym tagiem, pomijając tego, który jest wyświetlany.
Mam gotowe polecenie wyświetlające newsy z jednym powtarzajacym się tagiem, ale gdy dochodzi drugi, trzeci itd. to nie wiem co zrobic:

  1. SELECT `news_id` FROM `news` LEFT JOIN `tag_links` ON tag_links.element_id = news.news_id WHERE `tag_id` = :id1 AND `element_category` = 0 AND news_id != ? ORDER BY news.news_addTime DESC


Uprzedzając pytania, tak słyszałem o OR, ale problem w tym, że nie zawsze wiadomo ile będzie tych tagów.
Mam nadzieję, że zrozumiale napisałem to pytanie biggrin.gif
Go to the top of the page
+Quote Post
adrianpl20
post 18.09.2014, 18:50:29
Post #4





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 20.02.2014

Ostrzeżenie: (10%)
X----


nigdy nie wiadomo ale jakieś maks. musisz założyć, nigdy nie widziałem by wątek na forum miał więcej niż kilka tagów.

Możesz zrobić z tym OR - do jakiejś zmiennej z pętlą przypisz te wszystkie warunki z OR i po prostu wstawiaj tą zmienną w zapytanie
lub
zrób pętle i w jej środek daj pobieranie z bazy - jeden tag - 1 zapytanie

Ten post edytował adrianpl20 18.09.2014, 18:51:14
Go to the top of the page
+Quote Post
tomusrydy
post 18.09.2014, 18:59:22
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.09.2014

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


Też mi przyszedł do głowy taki pomysł, ale myślałem że da się to z poziomu samego MySqla załatwić. Chyba skorzystam z tego pierwszego sposobu, drugi wydaje mi się że ma taką wadę, że może wyświetlic mi kilka razy ten sam news. Dzięki za pomoc smile.gif
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: 3.07.2025 - 06:48