Tja, Du sorterar på en sträng. Text gämförs tecken för tecken från vänster. Tja Andreas,Generera idrottslags tabell med korrekt sortering
Har en vanlig tabell för idrottslag, med struktren
Namn
Antal spelade matcher
Gjorda mål
Insläppta mål
Differens mål (Gjorda mål - Insläppta mål)
Poäng
Mitt problem är att jag vill att hämtningen ska sortera på Poäng ASC, och sen på Differens mål DESC, problemet är dock att när man har negativa värden (< 0), blir sorteringen den omvända, alltså felaktig...
Är det någon som direkt har en lösning på ett dylikt problem?
<code>
SELECT teamid
, name
, played_games
, scores -- Målskillnad
, TRIM(LEFT(scores, POSITION('-' IN scores) - 1)) -- Gjorda mål
, TRIM(RIGHT(scores, LENGTH(scores) - POSITION('-' IN scores))) -- Insläppta mål
, points -- Poäng
, ((TRIM(LEFT(scores, POSITION('-' IN scores) - 1))) - (TRIM(RIGHT(scores, LENGTH(scores) - POSITION('-' IN scores))))) -- Differens målskillnad
FROM
teams
WHERE
is_active = 1
ORDER BY Poäng ASC, Differens målskillnad DESC, name
</code>
PS. SQL-koden är redigerad för ändamålet så kör den inte direkt i en db ;-)
Mitt problem är att den när det blir negativa värden tolkar -5 som större än -1 när man använde DESC, vilket inte är riktigt vad jag är ute efter...
EDIT:
Det var tydligen inget fel, däremot verkar inte mysql förstå att man vill fortsätta sortera på värden efter min kolumnangivelse (i siffra, DIFFERENS MÅLSKILLNAD, vilken är 7 för exemplet)... tar jag bort ORDER BY fältet name så går det alltså bra...!? Någon som kan förklara varför det blir så?Sv: Generera idrottslags tabell med korrekt sortering
I en databas bör värden vara atomära, ej delbara. Då du lagrar delbar information i scores. Skapa istället två kolumner av datatypen av säd för tal.
Om du vill göra en mer "korrekt" datastruktur, föreslår jag följande datastruktur:
<info>
Tabell: Teams
Fält: TeamId int (autoinc.)
Fält: TeamName varchar(50)
...
Tabell: Games
Fält: GameId int (autoinc.)
Fält: GameDate datetime
...
Tabell: GameTeams
Fält: GameTeamId int (autoinc.)
Fält: GameTeamTeam int -> Teams.TeamId
Fält: GameTeamScore int
Fält: GameTeamPoints int
Fält: GameTeamHome boolean
...
</info>
Lite mer komplext att ställa frågor mot. Sv:Generera idrottslags tabell med korrekt sortering
Dig kan man lita på när det kommer till SQL frågor, du är lysande på det...
Jo jag vet att min struktur lämnar övrigt att önska, men eftersom kunden inte direkt blev exalterad över en bättre, snyggar och mer utvecklingsbar lösning orkade jag inte förklara bättre utan körde på enklast möjliga sätt, kräver givetvis att användarna håller sig till den exakt strukturen annars smäller det hehe... men det är inte mitt probs ;-)
Skämt åsido, förmodligen gör jag om det i en bättre struktur i framtiden, men för dagen ser det ut så här, och jag fick det att fungera faktiskt, funkar klockrent än så länge, har dock inte testat det speciellt mycket ska kanske tilläggas... så är det någon som inte har mycket för sig och gärna testar satsen får ni gärna återkomma.