![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z zapytaniem
Mam tabelę tablica do której dodają się id dodanych filmów, galerii itd. Założenie jest takie aby zapytanie wyświetlało to co użytkownik zaznaczył że ma być na tablicy. Podstawowe treści, linki do fotek i filmów zawierają tabele filmy i galerie id_dodany w tabeli tablica zawiera id filmu, galerii którą użytkownik chcę umieścić na tablicy. mam taki problem - kiedy zapytanie dotyczyło tylko jednej tablicy (dla filmy) wszystko było ok teraz dodałem tablice galerie i dla filmów dalej jest ok z tym że przy jednym rekordzie w tablicy galerie wyświetla się tyle razy ile mam filmów czyli jeśli mam 7 filmów to mam i 7 razy ten sam wpis. Proszę o pomoc jak to rozwiązać bo ja już długo się z tym bawię i nic (IMG:style_emoticons/default/sad.gif)
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Zakładam, że że jeden użytkownik może mieć tylko i wyłącznie jedną tablicę i jedna tablica może należeć tylko i wyłącznie do jednego użytkownika. I nigdy się to nie zmieni. To ważne bo jeśli jest szansa, że któryś z tych dwóch warunków się zmieni, to warto już teraz przyjąć inną strukturę danych.
Jeśli chodzi o tabele mediów - "galerie", "filmy", itd. to jest OK. Jeśli chodzi o tablice użytkowników: zamiast przechowywać w jednej tabeli wszystkie informacje o powiązanych mediach, zrób indywidualne tabele dla każdego: "tablice_galerie", "tablice_filmy", itd. W każdej z tych tabel będziesz przechowywał informację o tym, która galeria/film/itd jest przypięta do której tablicy (do którego użytkownika), np.: Kod tabela "tablice_galerie" id_uzytkownik | id_galeria | data_przypiecia | komentarz W momencie tworzenia nowego wpisu o galerii w tabeli "galerie" musisz utworzyć też wpis w tabeli "tablice_galerie". W ten sposób, domyślnie, autor wpisu o galerii będzie miał przypiętą galerię do swojej tablicy. Galerię istniejąca w systemie będą mogli dodawać do swoich tablic inni uzytkownicy - będziesz dodawał kolejny wpis z takim samym identyfikatorem galerii i identyfikatorem osoby dodającej. W ten sposób pozwolisz odpiąć galerię od tablicy nawet autorowi wpisu o galerii i będziesz miał możliwość pokazywania galerii znajomym znajomych itd. Jak pokazać galerie znajomych na swojej tablicy? Przeszukując tabelę "znajomi". Z tą tabelą jest taki problem, że nie wiadomo w której kolumnie jest id aktualnie zalogowanego użytkownika. Ale to tylko mała niedogodność, z którą można sobie łatwo poradzić. Czyli, po pierwsze, potrzebujemy id użytkowników, którzy są znajomymi aktualnie zalogowanego użytkownika id X: Kod SELECT id_user_2 AS znajomy FROM znajomi WHERE id_user_1 = X UNION -- "union" elegancko połączy oba zapytania bez duplikatów SELECT id_user_1 AS znajomy FROM znajomi WHERE id_user_2 = X W wyniku dostaniesz kolumnę o nazwie "znajomy" wypełnioną identyfikatorami znajomych aktualnie zalogowanego użytkownika. Wyszukanie galerii obecnych na ich tablicach jest czystą formalnościa: Kod SELECT id_galeria FROM tablice_galerie WHERE id_uzytkownik IN ( SELECT id_user_2 AS znajomy FROM znajomi WHERE id_user_1 = X UNION SELECT id_user_1 AS znajomy FROM znajomi WHERE id_user_2 = X ) W wyniku dostaniesz identyfikatory galerii przypiętych do tablic wszystkich znajomych aktualnego usera. No OK, ale co jeśli niektóre z tych galerii są też przypięte do tablicy aktualnego usera? Nie chcemy ich dwa razy pokazywać, no nie? Do zapytania wyciągającego identyfikatory użytkowników dodajemy id aktualnego usera: Kod SELECT id_galeria FROM tablice_galerie WHERE id_uzytkownik IN ( SELECT id_user_2 AS znajomy FROM znajomi WHERE id_user_1 = X UNION SELECT id_user_1 AS znajomy FROM znajomi WHERE id_user_2 = X UNION SELECT X ) No i mamy identyfikatory wszystkich galerii, które aktualny user powinien zobaczyć na swojej tablicy: zarówno tych przypiętych do swojej tablicy jak i tych przypietych do tablic swoich znajomych; bez duplikatów. Do tego wyniku dodamy dane galerii: Kod SELECT tg.id_galeria, g.id_uzytkownik AS id_autora_galerii, -- "autora" w sensie twórcy wpisu o galerii g.data_przypiecia, g.komentarz AS komentarz_autora_galerii -- "autora" w sensie twórcy wpisu o galerii FROM tablice_galerie tg JOIN galerie g ON g.id_galeria = tg.id_galeria WHERE tg.id_uzytkownik IN ( SELECT id_user_2 AS znajomy FROM znajomi WHERE id_user_1 = X UNION SELECT id_user_1 AS znajomy FROM znajomi WHERE id_user_2 = X UNION SELECT X ) W wyniku otrzymasz takie zestawienie: Kod id_galeria | id_autora_galerii | data_przypiecia | komentarz_autora_galerii ------------+-------------------+---------------------+-------------------------- 23 | 483 | 2012-03-12 12:12:32 | Fajowa 287 | 12 | 2012-01-26 06:30:43 | Polecam 35 | 12 | 2012-01-29 09:45:01 | Polecam też To są same galerie. Podobnie robisz z filmami i innymi mediami. Poszczególne wyniki ładujesz do tablicy w PHP i tam sortujesz i obrabiasz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 15:23 |