Hur sorterar man tomma strängar längst ner i sql query?

Diskussion i 'Frågor, support och diskussion' startad av mardox, 7 jan 2011.

  1. mardox

    mardox Kid Droid Medlem

    Blev medlem:
    31 jan 2010
    Inlägg:
    73
    Mottagna gillanden:
    6

    MINA ENHETER

    Hej!

    jag har ett litet problem som nog enkelt löses med en kodsträng. problemet är ju självklart att jag inte vet vad detta är för kodsträng^^

    Jag queryar data från min sqllite databas med ORDER BY ASC , detta funkar finfint förutom att tomma strängar (dvs, sträng = "" ) räknas som de kommer före "a" i alphabetet. jag vill nu såklart att dessa kommer sist istället:)

    detta är hur min query ser ut i dagsläget

    Kod:
    public Cursor fetchAllDatesByTag() { return mdiktationsDb.rawQuery("SELECT " + KEY_DATEID + "," +" " + KEY_DATE + "," + " " + KEY_TIME + "," + " " + KEY_DICTTAG + "," + " " + KEY_DICTLISTIMAGE + " FROM " + DATABASE_TABLE + " ORDER BY " + KEY_DICTTAG + " ASC", null); }
    
    tackar för all hjälp!
     
  2. afzkl

    afzkl Youth Droid Medlem

    Blev medlem:
    27 aug 2009
    Inlägg:
    184
    Mottagna gillanden:
    6

    MINA ENHETER

    Det där var klurigt, jag tror faktiskt inte det går att göra på något enkelt sätt.

    Det enda jag kan komma på är att använda 2 quries. I den första hämtar du alla inte "tomma"
    Kod:
     WHERE KEY_DICTTAG != ""
    Sedan kör den en till query och hämtar all data där detta fält är tom.

    Om det sedan är en cursor du behöver för att presentera datan så kan du loopa igenom de båda cursorna och slå ihop dem till en MatrixCursor.

    Det var det enda jag kan komma på tyvärr.:P

    EDIT:
    Hur har du tänkt presentera datan? Måste du ha cursorn kvar eller skapar du något eget objekt efter detta? För i så fall skulle du ju kunna sortera din data efteråt med Collections.sort(); och i dit egna objekt implementera Comparable.
     
    Last edited: 7 jan 2011
  3. b.lindahl

    b.lindahl Teen Droid Medlem

    Blev medlem:
    20 aug 2009
    Inlägg:
    350
    Mottagna gillanden:
    9

    MINA ENHETER

  4. JerryJ

    JerryJ Youth Droid Medlem

    Blev medlem:
    5 jul 2010
    Inlägg:
    170
    Mottagna gillanden:
    2

    MINA ENHETER

    Last edited: 7 jan 2011
  5. mardox

    mardox Kid Droid Medlem

    Blev medlem:
    31 jan 2010
    Inlägg:
    73
    Mottagna gillanden:
    6

    MINA ENHETER

    jag har försökt med CASE nu och kan inte få det att funka hur jag än gör, får direkt en sqlite exception. kan helt enkelt vara att alla exempel på det är från sql server eller liknande och inte java.

    tacksam för all hjälp!

    EDIT: äntligen så löste jag det, behövde skriva om sql server utrycket lite och hoppas på det bästa^^

    slutresultatet:

    public Cursor fetchAllDatesByTag() {
    return mdiktationsDb.rawQuery("SELECT " + KEY_DATEID + "," +" " + KEY_DATE + "," + " " + KEY_TIME + "," + " " + KEY_DICTTAG + "," + " " + KEY_DICTLISTIMAGE + " FROM " + DATABASE_TABLE + " ORDER BY CASE " + KEY_DICTTAG + " WHEN '' THEN '1' ELSE '0' END ASC", null);}
     
    Last edited: 7 jan 2011