[ biske86 @ 08.07.2010. 14:25 ] @
Imam sledeću proceduru:

Code:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `SP_GET_USER_PERMISSION`(IN username varchar(15), IN meniid int)
BEGIN
set names utf8;
select m.naziv, gm.insertpermissiondane, gm.updatepermissiondane, gm.deletepermissiondane
from (((((korisnik k inner join grupa_korisnika gk on k.korisnikid=gk.korisnikid) left join
    grupa g on g.grupaid=gk.grupaid) inner join
    grupa_meni gm on gm.grupaid=g.grupaid) inner join
    meni m on m.meniid=gm.meniid))
where ((k.username=`username`) and (gm.meniid=meniid));
END


Pogled na model je sledeći:




Ono što dobijam kao rezultat izvršavanja procedure je:



E sada problem je sledeći. Ja ovde dobijam 2 reda a treba mi jedan. U jednom redu imam za delete permission 1 (što znači da ima pravo da briše rekorde u određenom meniju), a u drugom imam delete permission 2 (što znači da dati korisnik nema pravo da briše rekorde u određenom meniju). Imam dva reda zato što sam ovog korisnika stavio u dve različite grupe kojima se prava pristupa preklapaju. Znači meni treba da kada imam 1 i 2 recimo za delete permission, dobijem u izlazu 1 (korisnik je učlanjen u jednu grupu koja nema pravo pristupa, ali je uključen i u drugu grupu koja ima pravo pristupa tako da mi treba podatak da taj korisnik ima pravo pristupa).

Baza je mysql 5.1.
[ bogdan.kecman @ 08.07.2010. 14:39 ] @
mozes da uradis order by to polje sa permission-om i onda limit 1 .. tako dobijas sigurno samo jedan red i dobijas najmanju vrednost 1 ako ima ili 2 ako nema, ako ima 2 kao u primeru i 1 i 2 vratice 1 posto si tako sortirao ...

[ djoka_l @ 08.07.2010. 14:50 ] @
biske86 sram te bilo - postuješ u dve teme isto pitanje.

Evo ti referenca na moj odgovor u drugoj temi: http://www.elitesecurity.org/t404475-0#2644178
[ bogdan.kecman @ 08.07.2010. 15:07 ] @
ako predpostavimo da mu je username unique key (iako se ne vidi iz modela) te ovaj ceo upit treba da vrati samo jedan red onda nema svrhe da radi group by posto je order by + limit mnogo brzi (i pravi manje temporary tabela)
[ biske86 @ 08.07.2010. 16:17 ] @
Hvala obojici na brzom odgovoru, spasli ste me.

@djoka_l
Temu sam postavio u mysql zato što mi se problem javio u radu sa mysql bazom. Pored toga dosta sam ranije bio aktivan na podforumu baze podataka i znam da ima dosta ljudi koji odlično poznaju sql pa sam postavio temu i tamo. Izvinjavam se ako je to protivno pravilima foruma.
Nisam isprobao ali mislim da ovo rešenje koje je postavio bogdan.kecman ne bi radilo zato što imam tri kolone koje su mi bitne (insert, update, delete) sa mogućim vrednostima 1 i 2. Tako da je moguće dosta različitih kombinacija. Ovo rešenje koje je on postavio radilo bi ako mi je u igri samo jedna kolona. Ali ne bi radilo ako u jednom redu imam 1, 2, 1 za insert, update, delete a u drugom redu 2, 1, 2.

U svakom slučaju stavio sam rešenje koje je predložio djoka_l i radi kako se očekuje.
Hvala još jednom.