Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzenie praw do danych, a zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Jawor
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
AxZx
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']
Jawor
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).
AxZx
mozna tak
  1. SELECT katalog.DATA AS katalog_data, element.DATA AS element_data
Jawor
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.
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.