Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie po tagach, zawartości i tytule newsa.
tomusrydy
post
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
Post #2





Grupa: Moderatorzy
Postów: 36 559
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
Go to the top of the page
+Quote Post
tomusrydy
post
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 (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
adrianpl20
post
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
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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 22:01