Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [sql] many-to-many - pobieranie wyników
zdzichu
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 28.08.2006

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


Witajcie.
Załóżmy, że mam 3 tabele:
photos ( id,name)
tags (id,name)
i photo_tags (photo_id,tag_id)

photos i tag są połączone relacją wiele do wielu.
Teraz 2 pytania:
1. załóżmy, że chcę pobrać wszystkie zdjęcia, które są otagowane (jednocześnie) przez tagi foo i bar. Jak to wykonać za pomocą jednego zapytania?(i czy lepiej to mieć w jednym zapytaniu, czy może lepiej to rozbić na kilka selectów i przemielić w php) ?
2. Załóżmy, że mam zdjęcie o id= 5. Chciałbym pobrać zdjęcie, które ma podobne* tagi do tego zdjęcia

*tak naprawdę, to sam nie do końca jestem przekonany co oznacza podobne - czy dokładnie takie same, czy np. 80% tagów takich samych - tu bym prosił o radę, w jaki sposób uznać, czy zdjęcie jest podobne czy nie....
Z góry dzięki za odpowiedzi
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
i przy jednym tagu działa ok, jednak jak przyłączyć takie, które mają jednocześnie dwa tagi? dodanie AND photo_tags.name="bar" nie działa(bo i nie ma sensu)

Wystarczy chyba tylko jedno dowiązanie przy JOIN.

Cytat
zastanawiałem się nad takim rozwiązaniem: pobieram np. 80% tagów danego zdjęcia (to robię przez php) - i szukam innych zdjęć, które mają wszystkie te 80% tagów takich samych. jeśli nie ma, to szukam takie, które mają wspólne 60% tagów - i tak do momentu, aż nie znajdę np. 5 podobnych zdjęć. rozbije się to na (w wariancie pesymistycznym) kilka zapytań, ale w sumie nie będzie tam zasobożernych funkcji..

Zawsze pozostaje tabela opisująca pokrewne tagi.
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 16:57