Jag hade nog haft en egen tabell med alla användare istället och sen ha med "user_id" tillsammans med beloppen.
Blir nog lite lättare, samtidigt som du enkelt kan bygga ut med flera användare vid behov.
3 svar · 343 visningar · startad av Minna
Jag vill via en sql-query få ut columnnamnet när datat för en viss specifik rad inte är "null"
dvs jag har följande tabell:
id, PETER , LARS, ANDERS, MONA, KALLE
1, 1000, null, null, 200, null
2, 200, null, null, null, 300
3, null, 300, null, 400, 100
4, null 1050, null, null, null
5 null, null, 400, null, null
...
När jag väljer att söka efter id=1 så vill jag få ut "PETER" och "LARS". När jag söker på id=2 vill jag få ut "PETER" och "KALLE" osv.
Jag hade nog haft en egen tabell med alla användare istället och sen ha med "user_id" tillsammans med beloppen.
Blir nog lite lättare, samtidigt som du enkelt kan bygga ut med flera användare vid behov.
Håller med föregående talare. Men ifall att du bara exemplifierade så kan jag peka hitåt: http://www.webforum.nu/showthread.php?t=175216
Om din databasmotor stödjer det (SQL Server 2005 eller Oracle) så kan du använda dig av "unpivot". Annars kan du t ex använda dig av en hög med UNIONs. Så här borde koden bli för ditt problem:
(SELECT id AS id, 'PETER' AS columnname, PETER AS value FROM tabellnamn WHERE id = 2 AND PETER IS NOT NULL)
UNION ALL
(SELECT id AS id, 'LARS' AS columnname, LARS AS value FROM tabellnamn WHERE id = 2 AND LARS IS NOT NULL)
UNION ALL
(SELECT id AS id, 'ANDERS' AS columnname, ANDERS AS value FROM tabellnamn WHERE id = 2 AND ANDERS IS NOT NULL)
UNION ALL
(SELECT id AS id, 'MONA' AS columnname, MONA AS value FROM tabellnamn WHERE id = 2 AND MONA IS NOT NULL)
UNION ALL
(SELECT id AS id, 'KALLE' AS columnname, KALLE AS value FROM tabellnamn WHERE id = 2 AND KALLE IS NOT NULL)
Det som MickeA föreslår är att du istället ska lagra datat i två tabeller, en för namnen och en för poängen (eller vad det nu är)
[b]users[/b]
user_id name
1 PETER
2 LARS
3 ANDERS
4 MONA
5 KALLE
[b]points[/b]
user_id points round_id
1 1000 1 --Peter
4 2000 1 --Mona
1 200 2 --Peter
5 300 2 --Kalle
...osv
Sedan kan du plocka ut data med en fråga i stil med:
SELECT u.name AS name
FROM points p
JOIN users u ON u.user_id = p.user_id
WHERE p.round_id = 2
Självklart kan du även beräkna summa och annat rätt så enkelt.
Tack, ska kika på det!