webForumDet fria alternativet

Vissa poster hämtas två ggr?

Databaser & SQL

16 svar · 514 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1
SELECT distinct id,forname,familyname,[username],company[b], case when sgadmingroup = 0 then 'Medlem' else 'Admin' end adm [/b]
FROM user_members LEFT JOIN site_groups, user_groups ON gid = sgid and umid=id

Om jag tar bort det fetmarkerade så returnerar frågan rätt antal poster, har jag den kvar så kommer de personer som finns i kolumnen sgid att visas två/flera gånger. Hur undviker jag det?

Medlem sedan dec. 200012 464 inlägg
#2

Beskriv vilka tabeller du har, ge exempeldata och vilket resultat du vill ha.

Medlem sedan nov. 20017 144 inlägg
#3

Tablell user_members
id,forname,familyname,username,company
1,karl,olsson,kalle,ikea
2,bill,gates,billy,microsoft

Tabell site_groups
sgid, sgname, sgadmingroup
22, Ikeagrupp, 0
23, Diversgrupp, 0
24, Admingrupp Ikea, 1

Tabell user_groups
umid, sgid
1,22
1,24
2,23

1|karl|olsson|kalle|ikea|Admin
2|bill|gates|billy|microsoft|Medlem

Alltså:
Lista alla medlemmar ur tabellen user_members
Om medlemmen skulle råka tillhöra en admingrupp ( sgadmingrupp = 1)
Visa 'admin', om inte visa 'medlem'.

Medlem sedan nov. 20017 144 inlägg
#4

Är det taskigt beskrivet eller låter det sig inte göras?

Medlem sedan nov. 20017 144 inlägg
#5

Finns det någon som har ett tips till mig här?

Medlem sedan dec. 200012 464 inlägg
#6

Jag återkommer i kväll (har varit bortrest).

Medlem sedan nov. 20017 144 inlägg
#7

Oki. :)

Medlem sedan dec. 200012 464 inlägg
#8
select id,
 forname,familyname,username,
 case when exists(
  select * 
    from site_groups sg join user_groups ug
      on sg.sgid = ug.sgid
   where sgadmingroup = 1
     and ug.umid = um.id) then 'Admin'
                          else 'Member' end 
  from user_members um
Medlem sedan dec. 200012 464 inlägg
#9

Eller om databashanteraren heter Access

select id,
 forname,familyname,username,
 iif(sgadmingroup is null,'Member','Admin') 
  from (user_members um left join user_groups ug
      on ug.umid = um.id) 
   left join site_groups sg 
     on (ug.sgid = sg.sgid
     and sgadmingroup = 1)
Medlem sedan nov. 20017 144 inlägg
#10

Åhhh nej, det skulle jag ha sagt. Det är mySql 4.0.22 som inte hanterar sub-selects. Måste jag köra två separata select-satser då?

Medlem sedan dec. 200012 464 inlägg
#11
select id,
 forname,familyname,username,
 case when sgadmingroup is null then 'Member'
else 'Admin' end
  from user_members um left join user_groups ug
      on ug.umid = um.id
   left join site_groups sg 
     on ug.sgid = sg.sgid
     and sgadmingroup = 1
Medlem sedan nov. 20017 144 inlägg
#12

Det blir fortfarande dubletter av de medlemmar som ex. är medlem i en grupp och admin i en annan.
1|karl|olsson|kalle|ikea|Admin
1|karl|olsson|kalle|ikea|Medlem
2|bill|gates|billy|microsoft|Medlem
Även fast jag plockar med distinct i frågan.

Medlem sedan dec. 1999707 inlägg
#13

Jag vet inte om följande fungerar i mySql, har bara testat på SQLServer.

select
	um.id,
	um.forname,
	case max(sgadmingroup)
		when 1 then 'Admin'
		else 'Medlem'
	end AS adm
from
	user_members um

	left outer join
	user_groups ug
	on
	ug.umid = um.id

	left outer join
	site_groups sg
	on
	sg.sgid = ug.sgid

group by
	um.id,
	um.forname
Medlem sedan dec. 200012 464 inlägg
#14

Hmm, jo det stämmer. Den första frågan fungerar ju så du skulle kunna byta till 4.1

Jag får fundera lite.

Medlem sedan dec. 1999707 inlägg
#15

Bör tilläggas att MAX() inte fungerade på bit-fält i sqlserver så jag satte den som en int så fungerade det, men det kanske inte är något problem om i mySql? :o

Medlem sedan dec. 200012 464 inlägg
#16
select id,
 forname,familyname,username,
 min(case when sgadmingroup is null then 'Member'  
else 'Admin' end)
  from user_members um left join user_groups ug
      on ug.umid = um.id
    left join site_groups sg          
     on ug.sgid = sg.sgid
     and sgadmingroup = 1
group by
id,forname,familyname,username
Medlem sedan nov. 20017 144 inlägg
#17

toha din funkade utmärkt, tack. :)
LarsG du är skall ha en stor eloge du med. Tack!
Mitt webbhotell verkar inte vilja uppgradera till 4.1 av ngn anledning. :(

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)