![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat 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) ? JOIN + WHERE Cytat 2. Załóżmy, że mam zdjęcie o id= 5. Chciałbym pobrać zdjęcie, które ma podobne* tagi do tego zdjęcia Hmm, możesz pozajeżdżać bazę w ten sposób... Jest w MySQL funkcja obliczająca podobieństwo fraz, ale na dłuższą metę to zajeździ bazę... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 7 Dołączył: 15.05.2005 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
1. Poczytaj o JOIN
2. Moim zdaniem lepiej dodawać więcej tagów do zdjęć, aby jak najlepiej je opisać, a podobne tagi określać jako takie, że przynajmniej jeden tag się zgadza. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 28.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
ok, więc do do pierwszego, mam coś takiego:
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) co do drugiego: 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.. |
|
|
![]()
Post
#5
|
|
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. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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) No bo powinieneś użyć IN, ewentualnie OR.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 28.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
...prosiłbym bardzo o pomoc przy tym joinie. mam takie zapytanie:
i otrzymuję w wyniku coś takiego: Kod photo_id name tag tag_id 7 asd.jpeg foo 5 8 dsa.jpeg foo 5 8 dsa.jpeg bar 6 9 ttt.jpeg bar 6 ogólnie wiem, że ten IN() nie ma sensu w moim przypadku, użyłem go tylko, żeby pokazać jak wyglądają dane w mojej bazie. chciałbym pobrać zdjęcie, które ma tagi foo i bar - czyli w moim przypadku dsa.jpeg (i tylko te) z góry dzięki za wszelką pomoc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 13:55 |