Szerző |
Üzenet |
_optikus_
arany tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 474
|
Az AND-al kapcsolatban igazad van, az az egesz select ugy nem is jo. Inkabb probazd ki ezt: Kód: SELECT melosok.mid, melosok.name FROM melosok, user_security WHERE (melosok.mid = user_security.melosok_mid ) and (user_security.security_sid in (SID1,SID2) ) GROUP BY melosok.mid, melosok.name HAVING (count(*) > 1) ;
Szerintem ezt a MySQL-nek is meg kell ennie hiszen a having regota szabvany. Lenyege hogy a GROUP BY eredmenyere tudsz tovabb szukiteni, itt pl. ahol tobb mint egy sor van azokat hagyja meg (mivel ahol egy meloshoz csak 1 sor van az vagy az egyik SID vagy a masik, amit nem kell figyelembe venni). Ezzel a megoldassal elkerulheted az outer joint es tarsait, DISTINCT-elni sem kell feleslegesen es a security tabla is tok felesleges a selectbe.
Ha az IN nem menne akkor rakj a helyere egy OR-os megfelelot.
|
szer. jún. 23, 2004 13:21 |
|
|
pggp
arany tag
Csatlakozott: pén. ápr. 16, 2004 20:45 Hozzászólások: 175
|
A LEFT JOINt is lehet használni, akkor megúszol egy-két WHERE felrételt és talán gyorsabb lesz a lekérdezés. De nekem túl bonyolult, inkább több WHEREt használok.
|
szomb. jún. 12, 2004 21:21 |
|
|
LDani
vas-tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 9
|
Hoppá!
>FROM TERMEK MELOSOK
>akkor először legyártja a két tábla kombinációját
Ezt tényleg nem tudtam.
Erre jók a fórumok. Így már világos számomra hogyan kellene...
őszintén szólva ilyen LEFT JOIN jellegű dolgokkal próbálkoztam eddig (nem sok sikerrel)
kössz!
|
szomb. jún. 12, 2004 7:47 |
|
|
pggp
arany tag
Csatlakozott: pén. ápr. 16, 2004 20:45 Hozzászólások: 175
|
Úgy tűnik nem ismered az SQL parancsok filozófiáját. Pongyolán fogalmazva a következő:
Ha több tábla szerepel a lekérdezésben, például:
FROM TERMEK MELOSOK
akkor először legyártja a két tábla kombinációját (minden TERMEK rekordot minden MELOSOK rekorddal összepárosít). Ez például 1325 generált rekordot jelent, ha 25 rekord van a TERMEK és 53 rekord van a MELOSOK táblában. Ha három tábla van, például:
FROM TERMEK MELOSOK DATUM
akkor ez 23580 generált rekordot jelent, ha 25 rekord van a TERMEK , 53 rekord van a MELOSOK és 18 rekord van a DATUM táblában.
A rekordgenerálás után jön a WHERE-nél megadott feltételek szerinti szűrés.
Persze a valóságban nem jön létre egyszerre az összes generált rekord, mert egy egyszerű algoritmussal mindig csak egy generált rekorddal foglalkozik.
|
pén. jún. 11, 2004 13:36 |
|
|
LDani
vas-tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 9
|
Mivel külön sorban vannak a jogok, ezért AND-el szerintem ne fog működni: pl az OR-t használom és mindenkihez 2 joginformációt tárolok, akkor a lekérdezés során mindenki 2x jelenik meg: az elsősorban az első joggal, a második sorban a második joggal felsorolva ==> ha ezeket ÉSeled soha ne fog egyezőséget találi....
A HAVING nem tudom, hogy mit csinál, de megnézem.
Mindenesetre thx a hozzászólást
|
pén. jún. 11, 2004 6:59 |
|
|
_optikus_
arany tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 474
|
Akkor AND-ot rakjal az OR helyere.
Ha csak egy peldanyban kell akkor SELECT DISTINCT MELOSOK.name ....
es a FROM utani tablaneveket vesszovel valszd el.
Ha kell akkor a GROUP BY helyett a HAVINGOT tanulmanyozd.
Egyebkent meg valami utanaolvasas nem artana a relacios adatbaziskezelesrol meg szintugy némi SQL olvasnivalo.
|
szer. jún. 09, 2004 12:55 |
|
|
LDani
vas-tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 9
|
Re: mysql lekérdezés para...
Nem próbáltam ki, de valami hasonlónak kell lennie. Ha egy user mindkét feltételhez kapcsolódik, akkor kétszer fog szerepelni. Ezt ha jól emlékszem a GROUP BY paranccsal lehet kiszűrni.
thx a hozzászólást.
Az a helyzet, hogy engem pont akor érdekel egy user, ha mindkét feltételnek megfelel. És csak 1 példányban kellene szerepelnie..
üdv.LDani
|
hétf. jún. 07, 2004 23:10 |
|
|
pggp
arany tag
Csatlakozott: pén. ápr. 16, 2004 20:45 Hozzászólások: 175
|
Re: mysql lekérdezés para...
LDani írta: hi!
A következő problémára szeretnék megoldást találni: Mysql:Adott 3 tábla. Az egyikben felhasználók adatai (minden felhasználónak külön azonosító pl: MID). Egy másik táblában vannak különbőzó típúsú jogok azonosítói (SID) és nevei (SNAME )felsorolva. Egy harmadik tábla 2 oszlopból áll: felh.azonosító, jog azonosító.
Azt szertném elérni, hogy 1 lekérdezéssel kiderítsem, hogy melyek azok a felsználók amelyek 2 adott joggal rendelkeznek.
Pls segítsen vki, mert egész nap sz*ptam vele, és nagyon nem akar összejönni.
thx.LDani
táblák:
MELOSOK
mid: INT
name: CHAR(50)
SECURITY
sid: INT
name: CHAR(20)
USER_SECURITY
usid: INT
melosok_mid: INT
security_sid: INT
Lekérdezés, a két feltételel (SID1, SID2):
SELECT MELOSOK.name
FROM MELOSOK SECURITY USER_SECURITY
WHERE USER_SECURITY.melosok_mid = MELOSOK.mid AND USER_SECURITY.security_sid = SECURITY.sid AND ( SECURITY.sid = SID1 OR SECURITY.sid = SID2 )
Nem próbáltam ki, de valami hasonlónak kell lennie. Ha egy user mindkét feltételhez kapcsolódik, akkor kétszer fog szerepelni. Ezt ha jól emlékszem a GROUP BY paranccsal lehet kiszűrni.
|
hétf. jún. 07, 2004 7:19 |
|
|
ene
vas-tag
Csatlakozott: vas. jún. 06, 2004 12:59 Hozzászólások: 3
|
|
vas. jún. 06, 2004 13:02 |
|
|
LDani
vas-tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 9
|
mysql lekérdezés para...
hi!
A következő problémára szeretnék megoldást találni:
Mysql:Adott 3 tábla. Az egyikben felhasználók adatai (minden felhasználónak külön azonosító pl: MID). Egy másik táblában vannak különbőzó típúsú jogok azonosítói (SID) és nevei (SNAME )felsorolva. Egy harmadik tábla 2 oszlopból áll: felh.azonosító, jog azonosító.
Azt szertném elérni, hogy 1 lekérdezéssel kiderítsem, hogy melyek azok a felsználók amelyek 2 adott joggal rendelkeznek.
Pls segítsen vki, mert egész nap sz*ptam vele, és nagyon nem akar összejönni.
thx.LDani
|
szomb. jún. 05, 2004 21:16 |
|
|