Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie po tagach, zawartości i tytule newsa.
Forum PHP.pl > Forum > Bazy danych > MySQL
tomusrydy
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
nospor
Poprostu dołączasz kolejne tabele, z ktorych chcesz wyciągnąć dane. Robisz to przypomocy np. LEFT JOIN - patrz dokumentacja mysql
tomusrydy
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
adrianpl20
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
tomusrydy
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
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-2024 Invision Power Services, Inc.