Portál AbcLinuxu, 26. dubna 2024 02:19


Dotaz: Mysql - dotaz pro výběr prioritních řádků

7.8.2011 12:49 popr
Mysql - dotaz pro výběr prioritních řádků
Přečteno: 282×
Odpovědět | Admin
Ahoj. Mám tabulku:
opravneni:

uzivatel | typ | zdroj | pravo
-------------------------------
lojsa    |allow|clanky | cist
lojsa    |deny |clanky | cist
lenka    |allow|clanky | zapisovat
lenka    |allow|clanky | zapisovat
lenka    |deny |clanky | zapisovat
Toto 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:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.8.2011 13:13 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Mysql - dotaz pro výběr prioritních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ahoj

Jenom hruby tip. Neco jako

sort by Pocet_Duplicit, type desc
by nepomohlo?

Dejv

Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
Josef Kufner avatar 7.8.2011 13:15 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Mysql - dotaz pro výběr prioritních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
SELECT IF(SUM(IF(typ = 'allow', +1, -1)) >= 0, 'allow', 'deny') AS typ ...
GROUP BY uzivatel, zdroj, pravo
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 7.8.2011 13:17 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Mysql - dotaz pro výběr prioritních řádků
... případně to rozdělit na dva dotazy -- získat počty allow a deny zvlášť a pak to odečíst.
Hello world ! Segmentation fault (core dumped)
7.8.2011 13:17 Kit
Rozbalit Rozbalit vše Re: Mysql - dotaz pro výběr prioritních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
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;
7.8.2011 14:43 popr
Rozbalit Rozbalit vše Re: Mysql - dotaz pro výběr prioritních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Super. Díky za pomoc.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.