Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Udostępnianie danych innym użytkownikom
redelek
post 6.06.2011, 08:19:13
Post #1





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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ę


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
kadlub
post 6.06.2011, 08:22:36
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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



rozbijasz string na tablice po przecinku

Ten post edytował kadlub 6.06.2011, 08:23:11
Go to the top of the page
+Quote Post
nospor
post 6.06.2011, 08:24:40
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
redelek
post 6.06.2011, 08:41:43
Post #4





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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

Ten post edytował redelek 6.06.2011, 08:42:46


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
kadlub
post 6.06.2011, 08:47:46
Post #5





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


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
Go to the top of the page
+Quote Post
redelek
post 6.06.2011, 08:58:18
Post #6





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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 ?


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
mortus
post 6.06.2011, 09:01:49
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 6.06.2011, 09:02:42
Go to the top of the page
+Quote Post
redelek
post 6.06.2011, 09:07:18
Post #8





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
mortus
post 6.06.2011, 09:11:42
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 6.06.2011, 09:14:38
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 07:12