Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoć oko Membership tabela

[es] :: .NET :: Pomoć oko Membership tabela

[ Pregleda: 2308 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
*.sr.gov.yu.



Profil

icon Pomoć oko Membership tabela02.05.2007. u 15:30 - pre 206 meseci
Baza je sledeća



A upit

Code:

SELECT m.email
FROM aspnet_users u
INNER JOIN aspnet_usersInRoles uir ON u.userId = uir.userID
RIGHT OUTER JOIN aspnet_membership m ON u.userID = m.userID
INNER JOIN aspnet_custom_registrants cr ON m.userID = cr.userID
LEFT OUTER JOIN aspnet_roles r ON r.roleID = uir.roleID
WHERE cr.receiveNewsletter = 1
/* ako dodam ovo, ne vraca nikakve rezultate
AND r.roleName = 'user' */


Mislim da ste već skapirali šta mi je potrebno. Treba mi upit kojim ću da izvučem email adrese iz tabele aspnet_Membership ali samo za određenu rolu, a da je pritom receiveNewsletter = 1 u tabeli aspnet_custom_registrants.

Da li neko ima rešenje, ubih se sa ovim upitom.
Winners never quit, quitters never win.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Pomoć oko Membership tabela02.05.2007. u 17:59 - pre 206 meseci
Koristis outer joine kako ne treba.
1. joini na role moraju da budu inner (many to many zahteva dva inner joina). U suprotnom ces dobiti lazne matcheve u kojima ce kljucevi biti NULL.
2. right outer na membership treba da bude inner. right outer koristis kad hoces da svi redovi iz membership ulaze u join cak iako kljuc ne postoji u user, sto je ovde nemoguce jer je relacija one-to-zero/one. koristi innerjoin
3. membership na registrant treba isto da bude inner jer te ne interesuju oni koji nimaju registraciju sa receiveNewsletter
4. Kad poredis bit boolean polje, koristi <>0 umesto =1. Brze je malo a i ne zavisis od interpretacije servera (da li je true = -1 ili 1)

Code:

SELECT m.email
FROM aspnet_users u
INNER JOIN aspnet_usersInRoles uir ON u.userId = uir.userID
INNER JOIN aspnet_roles r ON r.roleID = uir.roleID
INNER JOIN aspnet_membership m ON u.userID = m.userID
INNER JOIN aspnet_custom_registrants cr ON m.userID = cr.userID
WHERE cr.receiveNewsletter <> 0 AND r.roleName = 'user' 


ako ti ni ovo ne vraca rezultat onda nemas korisnika sa uslovima koje si naveo, sto pre mislim da ce biti slucaj. Iako neoptimizovan, tvoj script bi trebao da radi ok zato sto te dve where klauzule ispeglaju tvoja dva outer joina u efektivne inner join-e. Probaj ovaj skript pa javi.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
*.sr.gov.yu.



Profil

icon Re: Pomoć oko Membership tabela02.05.2007. u 18:18 - pre 206 meseci
Koristio sam OUTER JOIN da bih isforsirao rezultate jer onako nisam mogao nikako da ih dobijem. Sa ovim upitom što si napisao sam počeo rešavanje problema, ali nisam dobijao nikakve rezultate, zato sam i stavio OUTER JOIN.


Citat:
mmix: ako ti ni ovo ne vraca rezultat onda nemas korisnika sa uslovima koje si naveo, sto pre mislim da ce biti slucaj.

Uveravam te da imam korisnike sa ovim uslovima (zapravo svi su mi trenutno sa tim uslovima u bazi).
Moram(o) da nađem(o) neko drugo rešenje! :)
Winners never quit, quitters never win.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Pomoć oko Membership tabela02.05.2007. u 19:14 - pre 206 meseci
Ako je to tacno onda sve ove skripte moraju da vrate bar po jedan red za dati @userid (postavi ga na vrednost korisnika za koji smatras da su ispunjeni uslovi). AKo neki ne vrati nista ta skripta koja je prazna je deo gde se lanac prekida.


Code:

declare @userId int;
set @userId = 12345; -- ovde stavi svoj broj

-- prva
SELECT u.*
FROM aspnet_users u
where u.userId = @userId;

--druga (prvo koleno MTMa)
SELECT uir.*
FROM aspnet_usersInRoles uir 
where uir.userId = @userId;

-- treca (drugo koleno MTMa)
SELECT r.*
FROM aspnet_usersInRoles uir 
INNER JOIN aspnet_roles r ON r.roleID = uir.roleID
where uir.userId = @userId;

-- cetvrto (pun MTM sa uslovom)
SELECT r.*
FROM aspnet_usersInRoles uir 
INNER JOIN aspnet_roles r ON r.roleID = uir.roleID
where uir.userId = @userId and r.rolename = 'user';

-- druga strana u membership
select m.* 
FROM aspnet_membership m 
where m.userID = @userId

- link ka registraciji 
select cr.* 
FROM aspnet_membership m 
INNER JOIN aspnet_custom_registrants cr ON m.userID = cr.userID
where m.userID = @userId

-- pun link uz proveru
select cr.* 
FROM aspnet_membership m 
INNER JOIN aspnet_custom_registrants cr ON m.userID = cr.userID
where m.userID = @userId and cr.receiveNewsletter <> 0


kao sto vidis podelio sam veliku skriptu u x malih da pokrijem svih sedam kombinacija podjoina u dva kraka od users tabele. Ako svaki od njih vrati bar po red onda i velika skripta mora da vrati bar jedan, a posto ne vraca onda bar jedna od ovih sedam mora bude prazna za svaki userid... Ajd vidi ko ne vraca


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
*.sr.gov.yu.



Profil

icon Re: Pomoć oko Membership tabela02.05.2007. u 20:06 - pre 206 meseci
Problem je ležao u drugom "grmu"!
Koliko sada shvatam, imao sam dva definisana (i aktivna) role provajdera u web.configu. Prvi je bio AspNetSqlRoleProvider, i drugi moj, "CustomRoleProvider" koji je u tagu "roleManager ==> <providers>" bio naveden kao DEFAULT. Pri kreiranju korisnika uvek sam u tabeli aspnet_Users dobijao po dva zapisa za istog korisnika, sa razlčitim UserID-jevima. Jedan UserID je bio strani ključ ka tabeli aspnet_UsersInRoles, a drugi ka tabeli aspnet_Membership. Tako da kad se ove dve tabele nađu u jednom istom INNER JOIN upitu, rezultati zapravo ne postoje! :)
Winners never quit, quitters never win.
 
Odgovor na temu

[es] :: .NET :: Pomoć oko Membership tabela

[ Pregleda: 2308 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.