Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Łączenie trzech tabel i wyszukiwanie kilku tagów
ziomal22
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 20.03.2008

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


Witam, próbuję jakoś w miarę zgrabnie zapytać bazę o taką sprawę.

Załóżmy że mam 3 tabele: posts, tags i posts_tags.
- posts ma kolumny id oraz title
- tags ma kolumny id oraz tag
- posts_tags ma kolumny post_id oraz tag_id

Jeden post może mieć przypisanych wiele tagów. Chcę wyszukać posty, które są oznaczone danymi tagami. Problem w tym, że chcę wyszukiwać pod kątem kilku tagów na raz, tzn. np szukam posta który ma jednocześnie tag "aktualności" i "święta" ((IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ).

Wymodziłem coś takiego:

  1. SELECT `posts`.`id`, `title` FROM `posts` JOIN `posts_tags` ON `posts`.`id` = `posts_tags`.`post_id` JOIN `tags` ON `posts_tags`.`tag_id` = `tags`.`id` WHERE `tag` = 'aktualnosci' AND `tag` = 'swieta' GROUP BY posts.id ORDER BY `date` DESC


To działa dla wyszukiwania jednego tagu, ale gdy chcę wyszukać dwa (jak powyżej), to zwróci pusty wynik. Nie mam pomysłu jak zrobić takie wyszukiwanie, chociaż problem wydaje się być oklepany. Próbowałem GROUP_CONCAT + HAVING LIKE - taki potworek by nawet działał, ale to raczej mało poprawne.

Z góry dziękuję za wszelką pomoc :-)
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


nie
  1. ... WHERE `tag` = 'aktualnosci' AND `tag` = 'swieta' ...

tylko
  1. ... WHERE `tag` = 'aktualnosci' OR `tag` = 'swieta' ...
Go to the top of the page
+Quote Post
ziomal22
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 20.03.2008

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


Taki wariant też próbowałem, niestety pokaże on również posty które mają tylko jeden z tych tagów. A mi zależy na obu. Jak to odfiltrować?
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


Kod
SELECT p.id, p.title FROM posts p
LEFT JOIN post_tags pt ON p.id = post_id
LEFT JOIN tags t ON tag_id = t.id  
WHERE (tag = 'aktualnosci' OR tag = 'swieta')
GROUP BY p.id HAVING COUNT(t.id) = 2;


sorry za znacznik [ code ] ale durny znacznik [ sql ] nie pozwala złamać wiersza i długich zapytań nie da się czytać...
Go to the top of the page
+Quote Post
ziomal22
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 20.03.2008

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


Działa! Po stokroć dzięki! :-)
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: 22.08.2025 - 21:43