webForumDet fria alternativet

Sortera så att det värde som finns flest gånger kommer först?

Databaser & SQL

6 svar · 223 visningar · startad av nkrantz

Medlem sedan apr. 2002830 inlägg
Frågan#1

Som min rubrik lyder vill jag alltså göra. Säg att jag i en sökning får följande resultat:

id | yrke_id
4 | 5
4 | 6
4 | 7
4 | 5
6 | 8
1 | 2
1 | 9
4 | 10

Då vill jag att den skall dels GROUP BY per id men också så att den sorterar så att ordningen blir 4 - 1 - 6

Någon som vet hur man gör?

/ Nippe

Medlem sedan dec. 200012 464 inlägg
#2
select id
 from t
 group by id
 order by count(*) desc
Medlem sedan apr. 2002830 inlägg
#3

Det är ju strålande!

Tack så mycket!

/ Nippe

Medlem sedan apr. 2002830 inlägg
#4

Hm.. ville visst inte funkar

SELECT 
					m.member_id,
					m.name
				FROM 
					tbl_member AS m,
					tbl_presentation AS p,
					tbl_freetext AS f
				WHERE 
						(p.presentation LIKE "%erfarenhet%"
					AND 
						p.member_id = m.member_id)
					OR
						(f.freetext LIKE "%erfarenhet%"
					AND 
						f.member_id = m.member_id)
				GROUP BY 
					(m.member_id)
				ORDER BY 
					count(m.member_id) DESC

Felmeddelande: MySQL said: Invalid use of group function

Medlem sedan apr. 2002830 inlägg
#5

Funkade att köra så här istället, det borde bli samma resultat:

SELECT 
					m.member_id,
					m.name,
					count(*) AS orderval
				FROM 
					tbl_member AS m,
					tbl_presentation AS p,
					tbl_freetext AS f
				WHERE 
						(p.presentation LIKE "%erfarenhet%"
					AND 
						p.member_id = m.member_id)
					OR
						(f.freetext LIKE "%erfarenhet%"
					AND 
						f.member_id = m.member_id)
				GROUP BY 
					m.member_id
				ORDER BY orderval DESC

// Nippe

Medlem sedan dec. 200012 464 inlägg
#6

Om du vill ha de medlemmar som antingen har med erfarent i presentation eller freetext

SELECT 	m.member_id,
	m.name
FROM tbl_member AS m left join
	tbl_presentation 
on 	(p.presentation LIKE '%erfarenhet%'
AND 	p.member_id = m.member_id)
left join tbl_freetext AS f
ON	(f.freetext LIKE '%erfarenhet%'
AND	f.member_id = m.member_id)

Den fråga (utan group by) du skrev skulle nog returnera lite för mycket poster pga ditt or-villkor.

Om det bara finns högst en post per användare i presentation och freetext så blir count alltid 1 så jag förstår inte vad du vill sortera på egentligen.

Medlem sedan apr. 2002830 inlägg
#7

:) Jag förstår att du inte förstår ;) Jag förklarade aldrig ;) Det är så att varje member_id kan vara kopplad till X antal presentationsfält och i dessa presentationsfält kan det sökta ordet finnas Y gånger.

Vad jag alltså vill göra är att den medlemmen som har flest förekomster av det sökta ordet hamnar högst upp i listan.

Men du har rätt, min fråga returnerade ett antal poster för mycket, ska testa din fråga!

Tackar igen! :)

// Nippe

255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)