![]() |
![]() ![]() |
![]() |
![]()
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:
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 :-) |
|
|
![]()
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%) ![]() ![]() |
|
|
|
![]()
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ć?
|
|
|
![]()
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ć... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 20.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Działa! Po stokroć dzięki! :-)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 21:43 |