Portál AbcLinuxu, 12. května 2025 16:52
opravneni: uzivatel | typ | zdroj | pravo ------------------------------- lojsa |allow|clanky | cist lojsa |deny |clanky | cist lenka |allow|clanky | zapisovat lenka |allow|clanky | zapisovat lenka |deny |clanky | zapisovatToto už je "sjednocená" tabulka resp. pohled. Vícenásobné řádky tam jsou z důvodu, že uživatel může být ve více skupinách. Já bych potřeboval z takové tabulky vrátit jen 2 řádky (lojsa s typem deny a lenka s typem allow). Pravidla jsou: pokud bude mít stejný uživatel nad stejným zdrojem a stejným právem větší počet dovolujících řádků, bude mu přístup povolen tzn. bude vrácen řádek s allow, pokud bude mít stejný uživatel nad stejným zdrojem a stejným právem stejný nebo menší počet povolujících řádku než zakazujících - bude mu přístup zakázán tzn. vrácen řádek s deny. Pomocí subdotazu a agregací jsem se dostal do stavu, kdy mám pro každého uživatele vrácen neduplicitní řádek s počtem duplicit, ale nevím jak dál.
Řešení dotazu:
Ahoj
Jenom hruby tip. Neco jako
sort by Pocet_Duplicit, type descby nepomohlo?
Dejv
SELECT IF(SUM(IF(typ = 'allow', +1, -1)) >= 0, 'allow', 'deny') AS typ ... GROUP BY uzivatel, zdroj, pravo
SELECT uzivatel, sum(if(typ='allow',1,-1)) AS typ2, zdroj, pravo FROM opravneni GROUP BY uzivatel, zdroj, pravo;Ve sloupci
typ2
je rozdíl mezi počtem allow a deny. Úplná realizace požadavku je jen o trošku složitější:
SELECT uzivatel, if(sum(if(typ='allow',1,-1))>0, 'allow', 'deny') AS typ2, zdroj, pravo FROM opravneni GROUP BY uzivatel, zdroj, pravo;
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.