Kom ihåg mig?
Home Menu

Menu


SQL: ORDER BY

 
Ämnesverktyg Visningsalternativ
Oläst 2008-08-19, 11:43 #1
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Har en SQL-sats:
SELECT * FROM table WHERE id IN (5,9,2)

Nu är problemet att jag vill ha dit en ORDER BY som sorterar just efter ordningen som anges i parametern, i detta fallet 5,9,2. Som det är nu får jag nämligen resultaten i formen 2,5,9 vilket inte funkar så bra.

Någon som kan vägleda lite? Det är Access-databaser jag jobbar med.
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 11:55 #2
svedlund.net svedlund.net är inte uppkopplad
Medlem
 
Reg.datum: Mar 2007
Inlägg: 63
svedlund.net svedlund.net är inte uppkopplad
Medlem
 
Reg.datum: Mar 2007
Inlägg: 63
Lättaste lösningen är nog att sortera efter ett annat värde, om möjligt. Vad är det som gör att du vill ha posterna i den specifika ordningen?
svedlund.net är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 12:02 #3
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Problemet är att jag har data i två olika databaser. Jag gör först en fråga mot den ena databasen där jag får ut den specifika ordningen. Det handlar om en topplista (där sorteringstabellen naturligtvis borde ligga i samma databas som tabellen med objekten)

I nödfall får jag väl slå ihop databaserna och köra med nästlade select-satser eller join eller nåt, det vet jag hur man kan lösa hyfsat enkelt, men nu ser ju databasstrukturen tyvärr ut som den gör...
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 12:17 #4
Westmans avatar
Westman Westman är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jun 2004
Inlägg: 4 021
Westman Westman är inte uppkopplad
Klarade millennium-buggen
Westmans avatar
 
Reg.datum: Jun 2004
Inlägg: 4 021
Hmm, selektera till temporär tabell med ett extra fält där 5r blir 1, 9r 2 och 2r 3 och sen sortera på det fältet?
Westman är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 12:26 #5
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Citat:
Originally posted by Westman@Aug 19 2008, 12:17
Hmm, selektera till temporär tabell med ett extra fält där 5r blir 1, 9r 2 och 2r 3 och sen sortera på det fältet?
Skulle inte det kräva att man måste köra typ ytterligare 10 SQL-satser (om det är 10 rader i tabellen) bara för att pytsa ut alla extranummer? Visst, ett lösningsförslag, men det låter onödigt krångligt. För då kan jag i så fall lika gärna köra SQL-frågan för varje rad jag skriver ut. Eller tänker jag fel?

Och för att ni ska slippa att fundera på varför man väljer att designa en sån idiotisk lösning så beror det på att jag hade en databas som uppdaterades dynamiskt (sorteringstabellen med mera), och en av mer statisk karaktär (objekten) som jag ftp:ade fram och tillbaka och redigerade offline...

Men det var på modemförbindelsernas tid, så jag antar att behovet av att arbeta offline har minskat något =)
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 14:16 #6
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Lindahl@Aug 19 2008, 12:26
Skulle inte det kräva att man måste köra typ ytterligare 10 SQL-satser (om det är 10 rader i tabellen) bara för att pytsa ut alla extranummer? Visst, ett lösningsförslag, men det låter onödigt krångligt. För då kan jag i så fall lika gärna köra SQL-frågan för varje rad jag skriver ut. Eller tänker jag fel?
Du kan ju köra ihop dem med UNION för att slippa många frågor till databasen med det blir ju i slutändan samma sak...

Det enklaste vore väl att bara göra en JOIN mellan den första och andra frågan (eller nästling som du var inne på). Det borde väl gå även med Access även om de är i två databaser? (Det låter dock som det enklaste vore att bara klona tabellen och stoppa in den i samma databas och sedan göra en vanlig JOIN.)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 23:02 #7
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Om databaserna ligger på samma maskin är det ju inga problem att ställa frågor som joinar data mellan flera olika databaser.
Kod:
SELECT * FROM db1.table1, db2.table2 WHERE ...
Sedan går det ju alltid att bygga en SQL som just "ändrar" värden till en sorterings ordning.
Kod:
SELECT *, CASE id WHEN 5 THEN 1 WHEN 9 THEN 2 WHEN 2 THEN 3 ELSE NULL END AS sort_order FROM table WHERE id IN (5,9,2) ORDER BY sort_order ASC
Brasklapp för syntaxen i sista frågan, men en dynamisk uppbyggd CASE-sats kan ge dig sort order.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-19, 23:47 #8
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Se där, såna grejer gillar vi! Efter lite Access-anpassning ser min SQL-sats nu ut såhär:
Kod:
SELECT *,SWITCH(id=5,1,id=9,2,id=2,3) AS ranking FROM table WHERE id IN (5,9,2) ORDER BY ranking ASC
Detta funkar dock inte (fel '80040e10')

Tar jag bort det sista ORDER BY så får jag dock inga felmeddelanden utan mina objekt plockas ut.
Kod:
SELECT *,SWITCH(id=5,1,id=9,2,id=2,3) AS ranking FROM table WHERE id IN (5,9,2)
Det märkliga här är bara det att om jag kör denna fråga i mitt webbaserade databasinterface så ser jag att det skapas en kolumn som heter just 'ranking' och att denna innehåller rätt värden (mellan 1 och 3). Varför går det då inte att köra ORDER BY på den kolumnen? Mycket märkligt, men ett bra steg på väg!
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-20, 00:05 #9
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Hur många värden kommer det röra sig om? Är 3 ett exempel eller kommer det vara 3 stycken i verkligenheten också? Är det inte lättare att bara göra det i koden istället för i databasen då?
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-08-20, 00:08 #10
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
I praktiken kommer det handla om ett 30-tal värden jag vill ha ut. Databasen innehåller ett tusental rader.
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:27.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017