złożone zapytanie SQL- dwie tabele

0

Witam,

mam skrypt w php stworzony kiedyś tam, przez kogoś tam :) Skrypt długi, ale działał na zwykłym zapytaniu

$zap = "SELECT * FROM news";
 

(news to tabla z artykułami, których jest dużo)

Ja dostałem zlecenie na rozbudowę skryptu. Mam ograniczyć prawa dostępu niektórym użytkownikom do części zasobów.

Stworzyłem tabelę uprawnienia- tabela ma strukturę id, id_news, admin, (itd, tutaj są użytkownicy) gdzie news.id=uprawnienia.id_news . Każdy wiersz to kolejny artykuł.

Chciałbym stworzyć zapytanie SQL, gdzie udałoby mi się wyciągnąć, czy ktoś ma prawa dostępu do artykułu czy nie. Niby proste:

$nazwa_uzytkownika = $_SESSION['user_name'];
$zap = "SELECT * FROM uprawnienia as u, news as n WHERE  u.id_news=n.id AND u.".$nazwa_uzytkownika."!=0"; 
 

ale przez takie coś w całym skrypcie zamiast pisać $r["id"] trzeba już pisać $r["n.id"]. Czyli sprawdzanie całego skryptu.

Są jakieś sprytniejsze metody zadania zapytania, żeby uniknąć "FROM uprawnienia as u, news as n"??

Pozdrawiam
Piotrek

0
XchmieluX napisał(a):

ale przez takie coś w całym skrypcie zamiast pisać $r["id"] trzeba już pisać $r["n.id"].

a kto CI takich bzdur naopowiadał???

0

no jeżeli w uprawnienia i w news mam kolumnę id, to wydaje mi się że odwołanie tak właśnie będzie wyglądać. jak jestem w błędzie, to proszę, wyprowadź mnie z niego.

1

u.".$nazwa_uzytkownika."!=0";

Co to ?

1)Możesz użyć podzapytania skorelowanego.
2)Możesz zmienić nazwę kolumny w uprawnieniach na coś innego niż id.

@abrakadaber jemu chyba nie chodzi o calutki skrypt PHP, tylko o to jak będzie loopował przez rs, znaczy chyba..

0
Mikajlo8 napisał(a):

u.".$nazwa_uzytkownika."!=0";

Co to ?

rekord kolumnie admin ma wartość 0 (brak dostępu) lub 1 (dostępny) dla danego użytkownika.

Mikajlo8 napisał(a):

1)Możesz użyć podzapytania skorelowanego.
2)Możesz zmienić nazwę kolumny w uprawnieniach na coś innego niż id.

AD1. rozjadą mi się inne skrypty bazujące na "uprawnienia".
AD2. sprawdzę, dzięki za pomoc!

Mikajlo8 napisał(a):

@abrakadaber jemu chyba nie chodzi o calutki skrypt PHP, tylko o to jak będzie loopował przez rs, znaczy chyba..

Dokładnie :)

pzdr

0

Sorry, ale nie kumam o co chodzi z tym:

u.".$nazwa_uzytkownika."!=0";

u-alias do tabeli.Czyli kolumna ma nazwe użytkownika ?

0
XchmieluX napisał(a):

no jeżeli w uprawnienia i w news mam kolumnę id, to wydaje mi się że odwołanie tak właśnie będzie wyglądać. jak jestem w błędzie, to proszę, wyprowadź mnie z niego.

bo zamiast pisać SELECT * FROM należy SELECT kol1, kol2, koln FROM a tam gdzie się powtarzają nazwy kolumn nadać im aliasy, np.
SELECT a.kol1 a_kol1, b.kol1 b_kol1, a.kol2, b.kol3 FROM

0
Mikajlo8 napisał(a):

Sorry, ale nie kumam o co chodzi z tym:

u.".$nazwa_uzytkownika."!=0";

u-alias do tabeli.Czyli kolumna ma nazwe użytkownika ?

tak. Nowy użytkownik to nowa kolumna.

abrakadaber napisał(a):
XchmieluX napisał(a):

no jeżeli w uprawnienia i w news mam kolumnę id, to wydaje mi się że odwołanie tak właśnie będzie wyglądać. jak jestem w błędzie, to proszę, wyprowadź mnie z niego.

bo zamiast pisać SELECT * FROM należy SELECT kol1, kol2, koln FROM a tam gdzie się powtarzają nazwy kolumn nadać im aliasy, np.
SELECT a.kol1 a_kol1, b.kol1 b_kol1, a.kol2, b.kol3 FROM

przerabiam czyjąś robotę, kolumn jest ok 10 - 15 jak nie lepiej. Nie chce mi się wszystkiego z palca przepisywać. A tak może czegoś nowego się nauczę :)

1

@XchmieluX

XchmieluX napisał(a):

tak. Nowy użytkownik to nowa kolumna.

To jest bardzo złe podejście. Zrób sobie tablice:[ id, id_user, id_news, previlegios] gdzie są odpowiednio kluczy do tablic z użytkownikami i z wiadomościami i w polu <previlegios> podaj czy ma dostęp do wiadomość.

0
Necronus napisał(a):

@XchmieluX

XchmieluX napisał(a):

tak. Nowy użytkownik to nowa kolumna.

To jest bardzo złe podejście. Zrób sobie tablice:[ id, id_user, id_news, previlegios] gdzie są odpowiednio kluczy do tablic z użytkownikami i z wiadomościami i w polu <previlegios> podaj czy ma dostęp do wiadomość.

czyli rozumiem, że jak mam dwa artykuły i dwóch użytkowników, to tworzę

 
 id, id_user, id_news, previlegios
1,1,1,x
2,1,2,x
3,2,1,x
4,2,2,x

x-prawa dostępu. Tak?

1
XchmieluX napisał(a):

czyli rozumiem, że jak mam dwa artykuły i dwóch użytkowników, to tworzę

 
 id, id_user, id_news, previlegios
1,1,1,x
2,1,2,x
3,2,1,x
4,2,2,x

x-prawa dostępu. Tak?

Dobrze rozumiesz :)

0

Bardzo dziękuję. Cenna rada :)

1
XchmieluX napisał(a):

Bardzo dziękuję. Cenna rada :)

Poza tym możesz sobie rozbudować tą tablice o następne kolumny, na dostęp do różnych dostępnych operacji na wiadomości, czyli modyfikacja, komentowanie, ocenianie, kasowanie .. i td. stawiasz sobie indeks id_user i id_news i będzie jak powinno być :)

0

Tak, tak.. Perspektywa sama się otwiera przy stworzeniu nowej tabeli. Teraz można praktycznie wszystko. :) Dziękuję jeszcze raz!

1 użytkowników online, w tym zalogowanych: 0, gości: 1