Postgresql kérdés
Alkalmazások fejlesztésénél próbáljuk azt az alapelvet követni, hogy az adatbázisok kezelésénél amit lehet, az adatbáziskezelőre bízzunk (fejlesztési környezet perl és postgresql). A Postgresql ezt remekül támogatja, szépen ki is dolgoztam a megszorításokat, szabályokat, triggereket.
Egy dologba viszont beletört a bicskám, érdekelne, hogy Ti hogyan oldanátok ezt meg. Természetesen az alkalmazás szintjén megvalósítottuk, de nyugodtabb lennék, ha ezt is adatbázis-szinten kezelnénk...
___
A probléma:
Adott egy kapcsoló-tábla, amely tárolja, hogy mely felhasználói csoportba mely felhasználók tartoznak:
group_user | group_id | user_id |
---------------------------------
1 | 1 | 2 |
2 | 1 | 3 |
3 | 1 | 6 |
4 | 1 | 7 |
A példában a 2,3,6,7 es user_id-jú felhasználók az 1-es group_id-jú csoportba tartoznak.
A felhasználói felületen checkbox-ok segítségével kijelölhetőek, hogy kik az adott csoport tagjai. Legyenek mondjuk az 3,6,8,1 felhasználók kijelölve, ekkor tehát törölni kell a 2,7 es usert, és felvinni a 8,1 usert. A változtatás után ezt szeretném látni:
group_user | group_id | user_id |
---------------------------------
2 | 1 | 3 |
3 | 1 | 6 |
5 | 1 | 8 |
6 | 1 | 1 |
___
Jelenleg a Perl kétszer hívja az adatbázis kezelőt: egyszer törli a felesleges tagokat, egyszer beszúrja az újakat.
E helyett szeretném egy postgresql-függvényhívással megoldani a dolgot, ahol átadom a kért csoport azonosítót valamint a felhasználó-azonosítókat egy tömbben (vagy record-ként) és a függvény ezek alapján végrehajtja a fentieket.
___
A kérdésem, hogy hogyan oldjam ezt meg? (Persze az is lehet válasz, hogy túlbonyolítom, és ezt igenis a Perl szintjén kell megoldani :-P ).
Szerintetek?
■ Egy dologba viszont beletört a bicskám, érdekelne, hogy Ti hogyan oldanátok ezt meg. Természetesen az alkalmazás szintjén megvalósítottuk, de nyugodtabb lennék, ha ezt is adatbázis-szinten kezelnénk...
___
A probléma:
Adott egy kapcsoló-tábla, amely tárolja, hogy mely felhasználói csoportba mely felhasználók tartoznak:
group_user | group_id | user_id |
---------------------------------
1 | 1 | 2 |
2 | 1 | 3 |
3 | 1 | 6 |
4 | 1 | 7 |
A példában a 2,3,6,7 es user_id-jú felhasználók az 1-es group_id-jú csoportba tartoznak.
A felhasználói felületen checkbox-ok segítségével kijelölhetőek, hogy kik az adott csoport tagjai. Legyenek mondjuk az 3,6,8,1 felhasználók kijelölve, ekkor tehát törölni kell a 2,7 es usert, és felvinni a 8,1 usert. A változtatás után ezt szeretném látni:
group_user | group_id | user_id |
---------------------------------
2 | 1 | 3 |
3 | 1 | 6 |
5 | 1 | 8 |
6 | 1 | 1 |
___
Jelenleg a Perl kétszer hívja az adatbázis kezelőt: egyszer törli a felesleges tagokat, egyszer beszúrja az újakat.
E helyett szeretném egy postgresql-függvényhívással megoldani a dolgot, ahol átadom a kért csoport azonosítót valamint a felhasználó-azonosítókat egy tömbben (vagy record-ként) és a függvény ezek alapján végrehajtja a fentieket.
___
A kérdésem, hogy hogyan oldjam ezt meg? (Persze az is lehet válasz, hogy túlbonyolítom, és ezt igenis a Perl szintjén kell megoldani :-P ).
Szerintetek?
altalanos velemeny
-cs-
Sanyi
Én egy egyszerű tárolt
Ezt most írtam neked:
select test('1|2|3|4|5|65|99|78|92');
ezzel pl. átatod neki a felhasználók azonosítóit, amit a tárolt eljárás átalakít tömbbé és azon végiglépkedsz, persze ez egy triviális megoldás - csak példa. És más megoldások is vannak!