Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Udostępnianie danych innym użytkownikom
Forum PHP.pl > Forum > Przedszkole
redelek
Hej,

Temat trochę zakręcony, ale nie mogę sobie poradzić. Postaram się go Wam przedstawić i opisać, może ktoś mi pomoże.
Mam tabele w której jest pole udostępnij. Każdy użytkownik po dodaniu nowego rekordu może go udostępnić innemu użytkownikowi.
Czyli janek dodał rekord i dopisał , że użytkownik o id 1 ma to widzieć. Użytkownik o id 1 po zalogowaniu zobaczy swoje rekordy plus rekord od janka.
Problem mam w tym, że janek jeden rekord udostępnia użytkownikowi 1,2,3 ( pole udostępniania jest typu VARCHAR ).
Po takim udostępnieniu użytkownik o id 2,3 nie widzą rekordu. Jeśli jest jedna cyfra to umiem zrobić to zapytanie , wygląda mniej więcej tak

  1. $wynik = mysql_query("SELECT * FROM $M_TABELA3
  2. JOIN $M_TABELA2 ON $M_TABELA3.idcategory=$M_TABELA2.id_category
  3. WHERE id_user=$IDUSER OR shared=$IDUSER
  4. ORDER BY id_mywebpass DESC") or die (SQL_SEL_E.mysql_error());


Niestety problem mam w tym, jak pobrać dla innych użytkowników , którzy są wymienieni w polu udostępniania po przecinku. Czy jest to w ogóle wykonalne?. Zależy mi na tym udostępnianiu.

Będę zobowiązany za informację
kadlub

rozbijasz string na tablice po przecinku
nospor
Masz złą strukturę bazy. Powinna być jeszcze jedna tabela, która będzie wiązała użytkownika, któremu udostępniasz , z rekordem z Twojej tabeli

TABELA WIĄŻĄCA
ID_USER
ID_REKORD_UDOSTĘPNIANY

Wówczas wszystko będzie jak należy
redelek
No dobra dodam tabele wiążącą, ale jak dodać do tej tabeli dane jeśli użytkownik w nowym rekordzie ma jedno pole w którym wymienia id innych użytkowników po przecinku ? bo to będzie kilka insertów
kadlub
jak dodasz tą tabele jak powiedział nospor to tamto pole nie będzie ci potrzebne dajesz warunek że np ID_USER= 2 i wyciągasz z tej tabeli wszystkie ID_REKORD_UDOSTĘPNIANY które spełniają ten warunek
redelek
kurcze zapalcie żarówkę bo nie rozumiem tego.
Skąd tabela wiążąca będzie wiedziała , że ten rekord jest udostępniony dla innego użytkownika ?
mortus
Dwa INSERT-y trzeba będzie zrobić. Pierwszy do wstawienia rekordu, a drugi do powiązania z rekordem użytkowników.
W taki sposób realizuje się bazodanową relację wiele do wielu.
redelek
no tak, ale jak użytkownik doda kilku użytkowników 2 lub 10 to będzie musiał być 10 insertów.
Bo jeśli użytkownik udostępnia jeden rekord użytkownikom 2, 3,4,5,6,7,8,9
to w tabeli wiążącej muszą powstać

id_user id_rec_shared
2 10
3 10
4 10
5 10
6 10
7 10
itd..
Tak , bo ja to tak rozumiem
mortus
Cytat(redelek @ 6.06.2011, 10:07:18 ) *
no tak, ale jak użytkownik doda kilku użytkowników 2 lub 10 to będzie musiał być 10 insertów.
Bo jeśli użytkownik udostępnia jeden rekord użytkownikom 2, 3,4,5,6,7,8,9
to w tabeli wiążącej muszą powstać

id_user id_rec_shared
2 10
3 10
4 10
5 10
6 10
7 10
itd..
Tak , bo ja to tak rozumiem

Wystarczy jeden INSERT troszkę bardziej rozbudowany:
  1. INSERT INTO relacja (id_user, id_rec_shared) VALUES (2, 10), (3, 10), (4, 10), (5, 10), (6, 10), (7, 10), ...
Nie wiem tylko, czy MySQL nie ogranicza tego rodzaju operacji do np. kilkudziesięciu wartości (VALUES). Jeżeli tak, to trzeba będzie w pętli INSERT-y zrobić, tak jak to zauważyłeś.

EDIT
W sumie to wszystko jest uzależnione od liczby użytkowników, którym dany rekord może być udostępniany. Jeśli tych użytkowników jest wielu, to może warto by było zastanowić się nad zaimplementowaniem grup użytkowników.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.