Avatar
sexton
Člen
Avatar
sexton:

Ahoj, nevím si rady s dotazem v ASP.NET kdy chci zobrazit tabulku zobrazující uživatelské jméno a jeho roli.
Mám tři tabulky:
AspNetUsers kde jsou sloupce Id a UserName
AspNetUsersRoles kde jsou sloupce UserId a RoleId
AspNetRoles kde jsou sloupce Id a Name

Rád bych zobrazil tabulku kde bude zobrazeno UserName a Name
Zatím jsem vytvořil pouze dotaz který mi zobrazí UserName a RoleId
SELECT [UserName], [RoleId] FROM [AspNetUsers] LEFT JOIN [AspNetUserRoles] ON [Id] = [UserId] ORDER BY [RoleId]
Prosím o radu jak na to.

 
Odpovědět 9.1.2015 22:08
Avatar
Martin Konečný (pavelco1998):

Pokud má každý uživatel roli, pak bych to napsal nějak takto:

SELECT [UserName], [Name]
FROM [AspNetUsers]
INNER JOIN [AspNetUserRoles] ON [Id] = [UserId]
INNER JOIN [AspNetRoles] ON [roleId] = [Id] z tabulky AspNetUserRoles
ORDER BY [RoleId]

Nevím, jak se tu zapisují i názvy tabulek, když kolidují názvy sloupců. V PHP a MySQL by se to napsalo jako

`AspNetUsers`.`roleId`
 
Nahoru Odpovědět 9.1.2015 23:48
Avatar
sexton
Člen
Avatar
sexton:

Díky za nakopnutí, funguje mi toto
SELECT *
FROM [AspNetUserRoles]
INNER JOIN [AspNetUsers] ON [AspNetUserRo­les].[UserId] = [AspNetUsers].[Id]
INNER JOIN [AspNetRoles] ON [AspNetUserRo­les].[RoleId] = [AspNetRoles].[Id]

Nefunguje mi SELECT [UserName], [Name] tak jsem zatím dal SELECT *
Na to ještě musím přijít

 
Nahoru Odpovědět 10.1.2015 10:36
Avatar
Odpovídá na sexton
Michal Štěpánek:

Jen bych v tomto případě místo INNER JOIN použil LEFT OUTER JOIN, protože když tam bude uživatel, který nebude mít žádnou roli, tak ti to s innerem nezobrazí nic.
EDIT: A hlavně bys měl místo SELECT * použít konkrétní sloupce, které chceš zobrazit

Editováno 10.1.2015 10:51
Nahoru Odpovědět 10.1.2015 10:48
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
sexton
Člen
Avatar
Odpovídá na Michal Štěpánek
sexton:

Já vím, že bych měl zadat konkrétní sloupce, ale nedaří se mi najít správnou verzi zápisu.
Zkoušel jsme toto a vše bylo špatně
SELECT [Name],[UserName]
SELECT [UserId],[RoleId]
SELECT [AspNetUsers]­.[Id],[AspNet­Roles].[Id]
SELECT [AspNetUserRo­les].[UserId],[As­pNetUserRoles]­.[RoleId]
SELECT [AspNetRoles]­.[Name],[AspNe­tUsers].[User­Name]

 
Nahoru Odpovědět 10.1.2015 11:39
Avatar
Michal Štěpánek:

Např. za předpokladu, že každý uživatel MUSÍ mít přiřazenou nějakou budovu zobrazím informace o uživateli z tabulky AspNetUsers (kde je budova zadána jako ID budovy) a název budovy z tabulky Budovy

SELECT AspNetUsers.Id, AspNetUsers.LastName + ' ' + AspNetUsers.FirstName AS Jmeno, AspNetUsers.Email, AspNetUsers.Pracoviste, Budovy.BudovaNazev
FROM AspNetUsers
INNER JOIN Budovy ON AspNetUsers.BudovaId = Budovy.BudovaId
ORDER BY Jmeno

Kdyby budovu přiřazenou mít nemusel, místo INNER JOIN bych musel použít LEFT OUTER JOIN

Editováno 10.1.2015 12:06
Nahoru Odpovědět 10.1.2015 12:05
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na sexton
Michal Štěpánek:

zapomněl jsem dát "odpovědět"

Nahoru Odpovědět 10.1.2015 12:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na sexton
Michal Štěpánek:

To, co jsem ti psal ti funguje?

Nahoru Odpovědět 10.1.2015 16:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
sexton
Člen
Avatar
sexton:

Nefunguje,
podle nastíněného postupu jsem vytvořil dotaz
SELECT [AspNetUsers]­.[UserName] AS [UserName], [AspNetRoles]­.[Name] AS [Name]
a nefunguje

 
Nahoru Odpovědět 10.1.2015 16:29
Avatar
Odpovídá na sexton
Michal Štěpánek:

Jednak je zbytečné psát ty hranaté závorky a hlavně ti tam chybí JOIN a taky nemáš z jaké tabulky chceš sosat...

Editováno 10.1.2015 16:53
Nahoru Odpovědět 10.1.2015 16:53
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
sexton
Člen
Avatar
Odpovídá na Michal Štěpánek
sexton:

Jasný vycházím z toho co mi fungovalo a snažím se nahradit hvězdičku u SELECTu jen sloupci které potřebuji.
Díky za upozornění, že závorky nejsou potřeba,
Takže celý dotaz je:
SELECT *
FROM AspNetUserRoles
INNER JOIN AspNetUsers ON AspNetUserRoles­.UserId = AspNetUsers.Id
INNER JOIN AspNetRoles ON AspNetUserRoles­.RoleId = AspNetRoles.Id

a v tabulce si vypíšu hodnoty UserName a Name. Takto mi to funguje.
Ale zbytečně ze serveru tahám celou tabulku.

 
Nahoru Odpovědět 10.1.2015 17:42
Avatar
Odpovídá na sexton
Martin Konečný (pavelco1998):

Něco takovýho nefunguje?

SELECT AspNetUsers.Name AS userName, AspNetRoles.Name AS roleName
FROM AspNetUserRoles
INNER JOIN AspNetUsers ON AspNetUserRoles.UserId = AspNetUsers.Id
INNER JOIN AspNetRoles ON AspNetUserRoles.RoleId = AspNetRoles.Id
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 10.1.2015 18:16
Avatar
sexton
Člen
Avatar
sexton:

Funguje, moc díky za pomoc.

 
Nahoru Odpovědět 10.1.2015 22:42
Avatar
Odpovídá na sexton
Martin Konečný (pavelco1998):

Nemáš zač. Možná by si body spíše zasloužil Michal.

 
Nahoru Odpovědět 10.1.2015 23:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.