Lehet én néztem be nagyon valamit, de megpróbálol elmondani egyszerűen.
Vagy adatbázik a lekérdezés számára fontos táblákkal.
user_menu (user_id,menu_id) - melyik user melyik menühöz van rendelve
menu (id,menu_group_id) - melyik menü melyik menücsoporban van
menu_group (id,name,...) - a menücsoportok
user_group(menu_id,group_id) - melyik csoporthoz milyen menük tartoznak
own_group(user_id,group_id) - melyik user melyik csoporthoz van rendelve
kb ennyi lenne ami fontos a dologban, hogy elmondhassam
szeretném megtudni, hogy hány menu_group található egy user adott alatt.
A lekérdezés így néz ki:
select menu_group.* from user_menu,menu,menu_group,user_group,own_group where menu_group.id=menu.menu_group_id and (user_menu.menu_id=menu.id or user_group=menu.id) and own_group.group_id=user_group.group_id) and owen_group.user_id=2 and user_menu.user_id=2 group by menu_group.id
lehetnek egyes user_id-nak saját menüjük és a csoporban lévő menükhöz is hozzáférhetnek, aminek tagjuk, így a kapott menülista alapján elméletileg kijönne hogy az adott menük milyen menücsoporban vannak, és magkapnám, hogy adott user hány menücsoporthoz tartozik és melyek ezek.
A gondom az, hogy a user egy csoporthoz sem tartozik, viszok vannak saját menüi, akkor üres eredményt kapok, ha akár 1 csoporjoz is tartozik, márik megkapom az összes eredményt.
Kérlek segítsetek egy helyes select megadásában.
- 2466 megtekintés
Hozzászólások
A gondod az, hogy egyértelműen meghatározod, hogy a user-nek csoportban kell lennie. Mégpedig itt:
where ... and owen_group.user_id=2 and
Vagyis ha a user nincs csoportban, akkor itt egy sohasem teljesülő feltételt adsz meg
ennek kb. így kéne kinézni imho:
and (owen_group.user_id=2 or user_menu.user_id=2)
- A hozzászóláshoz be kell jelentkezni
"szeretném megtudni, hogy hány menu_group található egy user adott alatt."
SELECT COUNT(mg.*) FROM menu_group mg
INNER JOIN menu m ON m.menu_group_id = mg.id
INNER JOIN user_menu um ON um.menu_id = m.id
WHERE um.user_id = 42
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget, de inkább csináltam két külön selektet és azt tettem egy union-ba, mert rájöttem, hogy itt igazán 2 halmaz összege kell, így ezzel gond nálkül megy.
- A hozzászóláshoz be kell jelentkezni
Üdv mindenkinek!
Akadt egy kis problémám, és ide írom le, mert nem akarok új topikot nyitni neki.
Tehát a probléma a következő:
Van két táblám: vevők és szállítólevelek.
A szállítóleveles táblában van egy ugyfel mező ami az adott vevő idjét reprezentálja.
A szállító készítése előtt egy listából kell kiválasztani a vevőt, és mivel gyk. pár vevőnek szállítózunk csak, ezért azt szeretném, hogy a legtöbbet szállítózott vevő legyen legfelül.
Ezzel semmi gond nincs:
SELECT A2.* FROM szallitok A1, ugyfelek A2 WHERE A2.ugyfel_azon = A1.ugyfel GROUP BY A2.ugyfel_azon
Azonban ez nem hozza azokat a vevőket akiknek még nem szállítóztunk.
Szerintetek hogyan kellene megoldanom?
Próbáltam így:
SELECT COUNT(A1.id) AS RANG, A2.* FROM szallitok A1, ugyfelek A2 WHERE ((A2.ugyfel_azon = A1.ugyfel) OR (RANG = 0)) GROUP BY A2.ugyfel_azon
de nem jó.
Segítségeteket előre is köszönöm.
- A hozzászóláshoz be kell jelentkezni
select u.ugyfel_azon, count(sz.id)
from ugyfelek u
left join szallitok sz on (sz.ugyfel = u.ugyfel_azon)
group by u.ugyfel_azon
order by 2 desc
Most nem tudom kipróbálni, de valami hasonló
- A hozzászóláshoz be kell jelentkezni
Köszönöm szépen így működik:
select u.*, count(sz.id) as rang
from ugyfelek u
left join szallitok sz on (sz.ugyfel = u.ugyfel_azon)
group by u.ugyfel_azon
order by rang desc
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Sajnos nem vagyok egy nagy sql virtuóz, viszont tudom, hogy hol kell olyan segítséget kérnem ami gyorsan és érthetően hozzásegít a kívánt eredmény eléréséhez.
Lehet, hogy ostobának tűnik a kérdés de nézzétek el nekem. Tehát a problémám:
van 3 táblám, az egyik egy function tábla a másik egy implementációs fájlokat jelölő tábla a harmadik pedig egy kapcsolótábla ami a function-t kapcsolja össze az implementációs modullal id alapján.
a táblák kb:
function
--------
id
name
description
implementation
--------------
id
name
description
func_imp_relation
-----------------
func_id
imp_id
egy olyan lekérdezést szeretnék csinálni, vagy view-t ami egy nézetbe pakolja nekem az összes információt. Egy rekordként lássam azt, hogy melyik function melyik implementációban van.
Esetleg ha valaki tudna egy egyszerű példát erre akkor lekötelezne!
Előre is köszönöm!
üdv,
Tibi
on all of them solvable
- A hozzászóláshoz be kell jelentkezni
Szerintem:
Nézettábla lesz. Ha nem kell lehagyod az elejét a SELECT-ig. Az ID-ket kihagytam, de ennek mintájára beleírhatod ha kell.
CREATE VIEW nezettabla AS SELECT function.name AS FUNC_NEV, function.description AS FUNC_LEIRAS, implementation.name AS IMP_NEV, implementation.description AS IMP_LEIRAS FROM function, implementation, func_imp_relation WHERE (( function.id = func_imp_relation.func_id ) AND (implementation.id = func_imp_relation.imp_id) );
- A hozzászóláshoz be kell jelentkezni
Szia,
köszönöm, megpróbálom így!
üdv,
Tibi
on all of them solvable
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Szeretném a segítségeteket kérni ebben a dologban: Létezik kettő táblám. Mind a kettőben függvény nevek vannak tárolva. Az egyik egy már meglévő rendszer függvényei a másik pedig egy elemzés során kapott függvény nevek.
Amiket tárolok róluk azok ezek - id, név, implementációs fájl, típus, elérési útvonal.
Mind a kettő táblában ezek az oszlopok szerepelnek természetesen.
A kérdésem az lenne, hogy milyen módon tudnám azt megcsinálni, hogy megvizsgáljam a következőket.
A halmaz = új függvények
B halmaz = meglévő függvények
1. B halmazban megnézni, hogy A halmaz bármely eleme szerepel-e benne. Ha egyáltalán nem létezik A halmaz eleme B halmazban akkor egy új függvény. De előfordulhat, hogy név alapján egyezik, de más az implementációs fájl. Ezt a külömbséget is észre kell venni. Mert a neve alapján nem lehet egyedi egy függvény. Azonos nevü de külömböző implementációs fájlban szereplő függvény az kettő függvény ugye.
2. Ha létezik B halmazban A halmaz eleme akkor meg kell nézni, hogy mindenben egyeznek-e vagy eltérnek valamiben. Itt kiderül, hogy egy függvény-e. Csak akkor beszélhetünk ugyan arról a függvényről ha A és B halmazban teljesen megyeggyeznek az attributumai, persze az id és az elérési út nem. :)
Tömören összefoglalva egy olyat szeretnék, hogy A és B között minden olyan elemet visszakapni ami nem szerepel B-ben de eleme A-nak. Egységként tekintve a nev,implementációs fájl,típus triora. Rekord szinten szeretném összehasonlítani őket.
Előre is köszönöm a válaszokat és a segítségeteket!
üdv,
Tibi
on all of them solvable
- A hozzászóláshoz be kell jelentkezni
Még nem találtam válaszat a kérdésemre de subselectekkel tudom elképzelni. Ha találok megoldást, illetve annak implementálását akkor megírom ide is. Bár lehet ennyire nem összetett ez a dolog mint ahogy én vázoltam. De a tisztán látás végett jobb ha majd írok róla még egy kis example-t.
Ha esetleg nektek is lenne javaslatotok még mindig szívesen látom őket!
Köszönöm!
üdv,
Tibi
on all of them solvable
- A hozzászóláshoz be kell jelentkezni