2017-02-16 1 views
0

Ich bin sicher, ich bin nur einen Gehirnfrost mit und dieser ist bonehead einfach, aber in SQLite, wenn ich die folgende Abfrage ausführen, scheint es, die Ergebnisse der Bestellung werden:SQLite mit Spalte Abfrage scheinen Ergebnisse zu sortieren

SELECT col_Referncia FROM lookup_57c5f58b0c4543df97fe5929498aa2bf 

enter image description here

Wenn ich die Wild card auf dem gleichen Tisch zu tun, ist es nicht (ich zeige nur, dass die Spalte wieder, aber es gibt auch andere Spalten).

SELECT * FROM lookup_57c5f58b0c4543df97fe5929498aa2bf 

enter image description here

Die Art und Weise der Code geschrieben ist, ich die Spalte angegeben werden muss. Gibt es eine Möglichkeit, es in einer nicht sortierten Weise (wie ich mit Wildcard sehen) zurückkehren zu lassen?

Die Tabelle enthält mehrere Spalten und Indizes. Ich vermute, das hat etwas mit den Indizes zu tun?

Antwort

2

Nein, das ist nicht möglich. Sie sollten immer angeben, welche Reihenfolge Sie festlegen möchten. Das heißt, im ersten Bild haben Sie eine Spalte angegeben, so dass SQL sie als ASC-Reihenfolge nach den Spaltenwerten vorgibt, während sie im zweiten Bild wahrscheinlich nach einem Primärschlüssel oder den ersten Spaltenwerten sortiert (Sie nicht vollständig Zeigen Sie das Tabellenschema, so dass wir es nicht wissen können), da Sie alle Spalten ausgewählt haben.

In jedem Fall sollten Sie sich niemals auf die DB verlassen, um die Artikel für Sie zu bestellen.

Ihre PK Unter der Annahme id Sie können dies nur einfach tun:

SELECT col_Referncia FROM lookup_57c5f58b0c4543df97fe5929498aa2bf ORDER BY id ASC

Aber immer noch wird dies nicht garantieren, dass die Bestellung wird immer wie Sie es sehen.

Eine andere Lösung besteht darin, Ihre col_Referncia Werte zu aktualisieren.

Gerade jetzt Ihre Spalten werden, um wie folgt aus:

1 - xxxxxxx 
10 - xxxxxxx 
100 - xxxxxxx 
2 - xxxxxxx 

Was ich schlage vor, Sie zu tun, um Ihre Einträge zu aktualisieren, so dass die Zahlen haben 0'en zB führende:

000001 - xxxxxxx 
000002 - xxxxxxx 
000010 - xxxxxxx 
000100 - xxxxxxx 

diese Weise wird die Bestellung wird korrekt sein.

+0

Das macht sehr viel Sinn. Mein Problem ist, dass diese Daten tatsächlich vom Benutzer generiert werden und wir die Tabelle und die Spalten basierend auf den von ihnen bereitgestellten Daten dynamisch generieren. Sie möchten dann die Daten genau so zurückgeben, wie sie eingegeben wurden (sie verwenden eine CSV-Datei, um die Daten anzugeben) in die DB-Tabelle. Die Spalten sind nicht festgelegt und können stark variieren. Ist das sinnvoll? Mit anderen Worten, sie möchten, dass eine Abfrage die Ergebnisse in der Anzeigenreihenfolge zurückgibt. Ugh –

+1

Eine Lösung dafür wäre, eine Spalte 'created_at' hinzuzufügen, die automatisch den aktuellen Zeitstempel hinzufügt, und Sie können einfach danach sortieren. Schauen Sie hier http://stackoverflow.com/questions/200309/sqlite-database-default-time-value-now, wie Sie eine Timestamp-Spalte erstellen. –

+0

Rechts. Ich dachte, ich könnte auch eine automatische Inkrementierungsnummer anheften, während der Tisch gebaut wird. Leider gibt es Tausende dieser einzigartigen Tabellen da draußen ... das wird auf einer Vorwärts-Basis funktionieren, aber für existierende Tabellen (wenn die Daten nicht aktualisiert werden) wird inkorrekt bleiben. –

Verwandte Themen