Megválaszolatlan hozzászólások | Aktív témák Pontos idő: szer. okt. 09, 2024 17:24



Hozzászólás a témához  [ 10 hozzászólás ] 
mysql lekérdezés para... 
Szerző Üzenet
arany tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 474
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: pén. ápr. 16, 2004 20:45
Hozzászólások: 175
Hozzászólás 
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
Profil Privát üzenet küldése
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 9
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: pén. ápr. 16, 2004 20:45
Hozzászólások: 175
Hozzászólás 
Ú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
Profil Privát üzenet küldése
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 9
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 474
Hozzászólás 
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
Profil Privát üzenet küldése
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 9
Hozzászólás 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
Profil Privát üzenet küldése
arany tag

Csatlakozott: pén. ápr. 16, 2004 20:45
Hozzászólások: 175
Hozzászólás 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
Profil Privát üzenet küldése
vas-tag

Csatlakozott: vas. jún. 06, 2004 12:59
Hozzászólások: 3
Hozzászólás 
http://dev.mysql.com/doc/mysql/en/JOIN.html


vas. jún. 06, 2004 13:02
Profil Privát üzenet küldése Honlap
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 9
Hozzászólás 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
Profil Privát üzenet küldése
Hozzászólások megjelenítése:  Rendezés  
Hozzászólás a témához   [ 10 hozzászólás ] 

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nem nyithatsz témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Magyar fordítás © Magyar phpBB Közösség