Avatar billede strcoder Nybegynder
24. februar 2004 - 07:34 Der er 7 kommentarer og
1 løsning

Avanceret SQL spørgsmål

Hej folkens, jeg har en mysql tabel hvor et af felterne indeholder komma separerede data, jeg vil gerne sortere på det der står i komma strengen på den måde at det der kommer før kommaet sorteres på én måde, og det der kommer efter kommaet på en anden.

de kommaseparerede data ligger i et felt der hedder 'kommastreng'

SELECT MAGISKFUNKTION(',' KOMMASTRENG) AS DATAFØRKOMMA, MAGISKFUNKTION(',' KOMMASTRENG) AS DATAEFTERKOMMA ORDER BY DATAFØRKOMMA ASC, DATAEFTERKOMMA DESC

Løsningen må gerne indeholde typecasting af data fra kommastrengen, da de data der er i kommastrengen er tal.


Håber i forstår hvad jeg mener

Her er den nuværende sql fra mit script, 'vcgemstreng' er kommastrengen.
---------------------------------------------------------------
select ibrugerid, ispilid, itid, vcgemstreng, daoprettet from tspil_score where ispilid=" . $spilid . " order by vcgemstreng desc, itid asc limit 0, 10
---------------------------------------------------------------
Avatar billede rasmusbg Nybegynder
24. februar 2004 - 07:47 #1
Kan det ikke komme på tale at lave to felter, som indeholder data-før-komma og data-efter-komma? Det ville ihvertfald være bedre databasedesign.
Avatar billede limemedia Nybegynder
24. februar 2004 - 08:35 #2
Løsningen forudsætter min. mySQL version 4.0.6 ! Dét virker ikke på min 3.23 server !

SELECT CAST(SUBSTRING_INDEX(kd, ',', 1) AS SIGNED) AS pc, CAST(SUBSTRING_INDEX(kd, ',', -1) AS SIGNED) AS ac
FROM tspil_score
ORDER BY ac ASC

før komma har jeg i eksemplet kaldt pc, og efter komma ac.

Jeg må tilslutte mig rasmusbg, data i to rækker vil til enhver tid være mere favorabel end ovenstående

Se også : http://www.mysql.com/doc/en/String_functions.html og http://www.mysql.com/doc/en/Cast_Functions.html
Avatar billede limemedia Nybegynder
24. februar 2004 - 08:35 #3
hov, kd i sætningen er din kommastreng, ret selv til navnet i din tabel
Avatar billede detox Nybegynder
24. februar 2004 - 08:58 #4
Kunne måske osse gøres sådan, men det ER upraktisk med den kommaseperation af data:

SELECT SUBSTRING_INDEX(vcgemstreng, ',', 1) +0 v, SUBSTRING_INDEX(vcgemstreng, ',', -1) +0 h FROM tspil_score ORDER BY v ASC, h DESC
Avatar billede detox Nybegynder
24. februar 2004 - 08:59 #5
Skulle være:

SELECT SUBSTRING_INDEX(vcgemstreng, ',', 1) +0 AS v, SUBSTRING_INDEX(vcgemstreng, ',', -1) +0 AS h FROM tspil_score ORDER BY v ASC, h DESC
Avatar billede limemedia Nybegynder
24. februar 2004 - 09:57 #6
testede detox's på en 3.23 hvor sorteringen virkede, hvorved du slipper for at anvende CAST der er mysql 4 specifik
Avatar billede strcoder Nybegynder
03. marts 2004 - 21:57 #7
rasmusbg>> Jeg er ved at lave en hel række javaspil, og vil gerne have at scoren fra alle spil kan gemmes i samme tabel da jeg ellers skal have en tabel pr. spil (det er nemlig ikke samme data der skal gemmes i alle spil), med detox's løsning kan jeg nøjes med én tabel, hvilket er færre end en tabel pr. spil. (det syntes jeg er optimering)

lars-jensen, detox>>
I må sq undskylde det langsomme svar drenge, havde for mange opgaver der skulle afleveres:(

Jeg har kigget på jeres svar, og ved nu at jeg har endnu mere at lære, i er for seje:)

detox's version spiller 100% på min MySql 3.23.58, og får derfor alle points.

Ville selvfølgelig hjælpe med et svar fra detox:)
Avatar billede detox Nybegynder
03. marts 2004 - 23:59 #8
Ok, men så siger jeg tak for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester