Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sprawdzenie praw do danych, a zapytanie
Jawor
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

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


Witam

Mam nastepujace tabele:

Uzytkownicy
id_uzytkownika | login | haslo

Katalog
id_katalogu | id_uzytkownika | nazwa_katalogu | data

Element
id_elementu | id_katalogu | nazwa_elementu

W sesji przetrzymuje id_uzytkownika.
I teraz np. przed wyswietleniem wybranego elementu chce sprawdzic czy nalezy on do aktualnie zalogowanego uzytkownika.

Do tej pory robilem to dwoma zapytaniami:
1. pobranie id_katalogu z tabeli Element
2. pobranie id_uzytkownika z tabeli Katalog (posiadajac wczesniej pobrane id_katalogu)

na koniec porownuje pobrane id_uzytkownika z sesja ...

Zastanawiam sie jednak jak by to zrobic za pomoca jednego zapytania, aby jednoczesnie moc pozniej wyswietlic dane z tabeli Element.

Zapewne trzeba polaczyc te tabele niestety nie bardzo rozumie dzialanie JOIN.

Bede wdzieczny za pomoc z wyjasnieniem gdyz chcialbym to zrozumiec, a nie tylko wykorzystac gotowy kod ...

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
AxZx
post
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


inner join - laczy 2 tabele i zwraca wynik pod warunkiem ze w oby dwu tabelach sa jakies dane.

czyli
  1. SELECT * FROM element INNER JOIN katalog ON element.id_uzytkownik = katalog.id_uzytkownik WHERE katalog.id_uzytkownik = $_SESSION['id_uzytkownik']


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Jawor
post
Post #3





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

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


A czy czasem nie powinno byc tak (dodalem warunek aby wyswietlilo tylko jeden konkretny rekord z tabeli element - ew. jak nie nalezy do zalogowanego uzytkownika to nic nie wyswietli):
  1. SELECT * FROM element INNER JOIN katalog ON [b]element.id_katalogu = katalog.id_katalogu[/b] WHERE katalog.id_uzytkownik = $_SESSION['id_uzytkownik'] [b]AND element.id_elementu = 4[/b]


Ta poprawiona wersja dziala, lecz mam pytanie jak mam podczas wyswietlania rozrozniac z ktorej tabeli pobiera dane w przypadku gdy w obu tabelach wystepuja pola o tych samych nazwach ?

Probowalem cos kombinowac:
  1. <?php
  2. $sql = "powyzsze zapytanie";
  3. $query = mysql_query($sql);
  4. $result = mysql_fetch_array($query);
  5.  
  6. echo $result['element.data'];
  7. ?>

lecz to nie dziala.

Jezeli uzyje normalnie:
  1. <?php
  2. $result['data'];
  3. ?>

To pobierze z tabeli katalog (jezeli w tabeli element rowniez istnieje pole data).

Ten post edytował Jawor 22.03.2008, 03:50:13
Go to the top of the page
+Quote Post
AxZx
post
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


mozna tak
  1. SELECT katalog.DATA AS katalog_data, element.DATA AS element_data


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Jawor
post
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

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


Dziekuje bardzo za pomoc.

Rozumiem ze rozbudowany przeze mnie WHERE jest poprawny i nie przyniesie zadnych nieoczekiwanych zdarzen ?

Update:

Mam jeszcze jedno pytanie.
Czy istnieje mozliwosc dodania do tego zapytania elementu ktory by mi zwrocil liczbe pobranych rekordow ?

Probowalem w ten sposob:
  1. SELECT count(element.id_elementu) AS jakas_nazwa, element.nazwa AS nazwa_elementu ... FROM element INNER JOIN katalog ON element.id_katalogu = katalog.id_katalogu WHERE katalog.id_uzytkownik = $_SESSION['id_uzytkownik'] AND element.id_elementu = 4

Lecz to niestety nie dziala (Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...)
Bylo by to przydatne do ostatecznego sprawdzenia czy dany element nalezy do uzytkownika.
Aktualnie robie to za pomoca funkcji mysql_num_rows -> jak zwraca 0 to element nie nalezy do uzytkownika, a jak 1 to nalezy.
Zastanawiam sie jednak czy nie da sie jakos uniknac uzycia mysql_num_rows.
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 Aktualny czas: 20.08.2025 - 18:50