Autor Zpráva
Joker
Profil
Problém, který mám, se trochu složitěji popisuje krátce, takže:

Mám vazební tabulku- přiřazení uživatelských práv. Vypadá jednoduše:
INT group_id, INT prava_id.

A výpis vypadá třeba takto:
1 - 1
1 - 2
1 - 3
2 - 1
3 - 2
3 - 4
4 - 2
...

A co bych chtěl udělat: Najít uživatele (resp. skupiny), kteří mají přiřazená stejná práva.
To jest, najít různá group_id, kterým přísluší stejná přiřazená kombinace prava_id.

Potřeboval bych nějakou efektivní metodu, jak to dosáhnout.
Zatím mě napadla akorát taková dost kostrbatá metoda.
Nox_lbc
Profil
a to je v jedný tabulce ?
SELECT group_id FROM foo WHERE prava_id = boo;

nebo ve dvou ? To vlastně ani nejde ;-) Nebo jak to tedy je ?
Joker
Profil
Je to v jedný tabulce, ale víc řádků.

Když dám druhý příklad:
výpis group_id - prava_id:
1 - 1
1 - 2
1 - 3
2 - 1
2 - 2
3 - 1
3 - 2
4 - 2
4 - 4
5 - 1
5 - 3
5 - 4


V tomhle příkladu mají stejná oprávnění přiřazené skupina 2 a skupina 3 (obě mají právo 1 a právo 2)

Potřebuju prostě najít různá group_id, kterým se v tabulce přiřazují (na různých řádcích) stejné kombinace hodnot.
Kajman_
Profil *
Možná by to šlo takhle nějak...

select prava, group_concat(group_id) from
(select group_concat(prava_id order by prava_id) prava, group_id from tabulka group by group_id) tmp
group by prava
having count(group_id)>1
Joker
Profil
Kajman_
No teda já zírám a smekám.
Akorát se přiznám, že mi není úplně jasné, jak ten dotaz přesně funguje. Chtěl jsem s ním dělat pokusy, ale na tohle tu mám moc starou verzi MySQL (4.0.23).
Mohl byste mi to trochu vysvětlit? No, radši trochu víc :o)
Kajman_
Profil *
Ten vnitřní dotaz udělá prostě ke každé skupině seznam práv oddělených čárkou. Na takto vzniklém sloupečku se vnějším dotazem udělá group by a je to.
Joker
Profil
Tak to je dost dobrá myšlenka... škoda jen, že to jde až od MySQL 4.1
No, zkusím vymyslet jak to obejít anebo jestli nebude lepší se na to ve 4.0.x úplně vykašlat... každopádně díky za tamto řešení
Toto téma je uzamčeno. Odpověď nelze zaslat.

0