[ biske86 @ 08.07.2010. 14:35 ] @
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.
[ djoka_l @ 08.07.2010. 14:45 ] @
Selektuj minimume ( u tvom slučaju ako imaš vrednosti 1 i 2 rezultat treba da bude 1):

Code (sql):
SELECT m.naziv, MIN(gm.insertpermissiondane), MIN(gm.updatepermissiondane), MIN(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));
GROUP BY m.naziv


Ovo je uvek "rule of the thumb" da koristiš min,max ili count funkcije ako hoćeš da izbegneš ponavljanje redova (ako ti nisu bitni)
[ biske86 @ 08.07.2010. 16:20 ] @
Hvala na odgovoru.

P.S. Šta znači "rule of the thumb"?
[ djoka_l @ 08.07.2010. 18:54 ] @
A rule of thumb is a principle with broad application that is not intended to be strictly accurate or reliable for every situation. It is an easily learned and easily applied procedure for approximately calculating or recalling some value, or for making some determination. Compare this to heuristic, a similar concept used in mathematical discourse, psychology and computer science, particularly in algorithm design.

http://en.wikipedia.org/wiki/Rule_of_thumb

Ma to ti je ono kao u elektrotehnici kada obuhvatiš desnom rukom provodnik tako da palac pokazuje smer struje, tada prsti pokazuju smer magnetskog polja.
Preneseno znači: pravilo koje naučiš napamet i ne razmišljaš puno o tome...
[ rambo @ 09.07.2010. 01:07 ] @
@djoka_l: Dali možeš da mi objasni kako se dobija onako specifično formatiran kod zavisno od jezika u kom je pisan? Viđao sam to na više mesta ali nigde ne videh neko objašnjenje kako se to radi.
[ djoka_l @ 09.07.2010. 09:30 ] @
Imaš u ovoj temi: http://www.elitesecurity.org/t386874-0#2484566

u "code" tag dodaš ":" pa naziv jezika. Pogledaj tamo koji su sve jezici podržani.
Inače, mogao si da klikneš na "- Citiraj ovu poruku -" tamo gde si video formatiranje, pa bi onda dobio sors poruke u svom odgovoru i sve bi ti bilo jasno