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ść.

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