Terminál Fórum
https://www.technokrata.hu/forum/

mysql lekérdezés para...
https://www.technokrata.hu/forum/viewtopic.php?f=2&t=18616
Oldal: 1 / 1

Szerző:  _optikus_ [ szer. jún. 23, 2004 13:21 ]
Hozzászólás témája: 

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.

Szerző:  pggp [ szomb. jún. 12, 2004 21:21 ]
Hozzászólás témája: 

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.

Szerző:  LDani [ szomb. jún. 12, 2004 7:47 ]
Hozzászólás témája: 

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!

Szerző:  pggp [ pén. jún. 11, 2004 13:36 ]
Hozzászólás témája: 

Ú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.

Szerző:  LDani [ pén. jún. 11, 2004 6:59 ]
Hozzászólás témája: 

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

Szerző:  _optikus_ [ szer. jún. 09, 2004 12:55 ]
Hozzászólás témája: 

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.

Szerző:  LDani [ hétf. jún. 07, 2004 23:10 ]
Hozzászólás témája:  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

Szerző:  pggp [ hétf. jún. 07, 2004 7:19 ]
Hozzászólás témája:  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.

Szerző:  ene [ vas. jún. 06, 2004 13:02 ]
Hozzászólás témája: 

http://dev.mysql.com/doc/mysql/en/JOIN.html

Szerző:  LDani [ szomb. jún. 05, 2004 21:16 ]
Hozzászólás témája:  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

Oldal: 1 / 1 Időzóna: UTC + 1 óra
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/