Forum: PC-Programmierung SQLite: Sortierung 1,2,3,4,1,2,3,4. Wie?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael H. (overthere)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich brauche eure Hilfe, ich schreibe gerade ein Programm mit sqlite für 
eine Bestückungsmaschine, die 4 Köpfe hat.

Jetzt möchte ich die Daten mit sqlite so sortieren, dass bei jeder Fahrt 
alle Köpfe voll sind.

Angebommen ich habe eine Tabellle mit Komponenten

Kopf,Bauteil
1,A1
2,B1
3,C1
4,D1
1,A2
2,B2
3,C3
4,D4

so möchte ich das sortiert haben. Gibt es irgendwie in Sqlite dafür eine 
elegante Lösung?

Danke,
-Michael

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Aus einer aufsteigenden Zahl mit Modulo 4 plus 1 die gewünschte Nummer 
1..4 erzeugen?

von Michael H. (overthere)


Bewertung
0 lesenswert
nicht lesenswert
Die Zahlen sind so in der Tabelle, und die darf ich nicht ändern. Ich 
muss die nur sortieren.

von Der kein Bock mehr A. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Äh, ja, dass die so in der Tabelle sind und Du die nicht verändern 
darfst ist schon klar, dafür "programmiert" man ja auch SQL drumrum ;-)

Kannst Du etwas mehr über die Tabelle preisgeben ? einen DUMP hier 
reinstellen, mitsamt CREATE STATEMENT ? Dann kann man etwas besser an 
der Sortierung arbeiten, die dann letztendlich im Abfragecode passieren 
muss.

Nicht ganz unwichtig ist natürlich der Trigger auf Seiten deiner 
Maschine, d.h. WAS löst das neubefüllen aus bzw. wie bekommst Du das 
Rückgemeldet ?

Hängt ein Programm dazwischen, was quasi eine Zustandsüberwachung macht 
? SQLite muss ja irgendwie erfahren, was sich in der Zwischenzeit 
geändert hat, damit es einen neuen Datensatz selektieren und ggf. 
erneuern kann.

Versteh ich das richtig, Du hast Kopf 1 bis 4 und pro Kopf kommt immer 
das gleiche Bauteil rein, Also Bauteil Typ A immer in Kopf 1, Bauteil 
Typ B immer in Kopf 2 usw .?

Sobald Kopf 1 seinen Job erledigt hat soll er mit einem neuen Bauteil 
Typ A beladen werden ?

Gruß

von Egon D. (egon_d)


Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:

> Die Zahlen sind so in der Tabelle, und die darf
> ich nicht ändern. Ich muss die nur sortieren.

"Wasch' mich, aber mach' mich nicht nass"?
Eine Sortierung ist doch auch eine Veränderung.

Abgesehen davon hat Rufus den Weg schon vorgezeichnet:
Je Kopf eine (ggf. sortierte) Liste erstellen; die
Elemente dieser Listen aufsteigend nummerieren -- aber:
Die Nummern in Liste A werden nach 4*N gebildet, die
Nummern in Liste B nach 4*N+1 usw.

Anschließend Listen verketten und nach der laufenden
Nummer sortieren.

von Michael H. (overthere)


Bewertung
-1 lesenswert
nicht lesenswert
Egon D. schrieb:
> Abgesehen davon hat Rufus den Weg schon vorgezeichnet:
> Je Kopf eine (ggf. sortierte) Liste erstellen; die
> Elemente dieser Listen aufsteigend nummerieren -- aber:
> Die Nummern in Liste A werden nach 4*N gebildet, die
> Nummern in Liste B nach 4*N+1 usw.

Danke, das war die Lösung. Im Prinzip setze ich aus ganz vielen Joins 
erstzmal eine temporäre Tabelle auf. Die kann ich dann auslesen, und wie 
du beschrieben hast nummerieren. Die geben ihre Werte auf 'ne zweite 
Tabelle aus, welche dann sortiert werden.

Vielen Dank an euch, für sowas liebe ich das Forum.

von Cyblord -. (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Michael H. schrieb:
> Im Prinzip setze ich aus ganz vielen Joins
> erstzmal eine temporäre Tabelle auf. Die kann ich dann auslesen, und wie
> du beschrieben hast nummerieren. Die geben ihre Werte auf 'ne zweite
> Tabelle aus, welche dann sortiert werden.

Solange du dann nicht in der nächsten Bewerbung angibst: "Gute 
Datenbank- und SQL-Kenntnisse", ...

von Soziologe (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
In richtiger SQL würde das ein

"group by"

wohl erreichen. Benutze halt was anständiges und nicht
dieses Krüppel-sqlite.

von PittyJ (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Ich dachte, man kann bei einer SQL-Abfrage auch immer ein 'Order By' 
angeben.
Dann sollte doch bei dem Select die Sortierung erfolgen.

Oder habe ich das jetzt falsch verstanden?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
PittyJ schrieb:
> Ich dachte, man kann bei einer SQL-Abfrage auch immer ein 'Order By'
> angeben.

Kann man. Aber nach was willst Du sortieren, wenn die Ausgabe so 
aussehen soll, wie im ersten Beitrag?

von ohne Account (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Solange du dann nicht in der nächsten Bewerbung angibst: "Gute
> Datenbank- und SQL-Kenntnisse", ...
kann er doch jetzt machen, bißchen Hilfe, Copy&Paste macht's möglich :-)

von Tek (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Soziologe schrieb:
> Benutze halt was anständiges und nicht
> dieses Krüppel-sqlite.

Dieses "Krüppel" SQLite kann auch group by...

von BobbyX (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Michael H. schrieb:
> Hallo,
>
> ich brauche eure Hilfe, ich schreibe gerade ein Programm mit sqlite für
> eine Bestückungsmaschine, die 4 Köpfe hat.
>
> Jetzt möchte ich die Daten mit sqlite so sortieren, dass bei jeder Fahrt
> alle Köpfe voll sind.

>
> so möchte ich das sortiert haben. Gibt es irgendwie in Sqlite dafür eine
> elegante Lösung?

Eher nicht, besonders weil sqlite keine stored procedures hat. Du 
versuchst unnötigerweise die Programmlogik in SQL abzubilden. Wenn bei 
jeder fahrt alle 4  Köpfe voll sein sollen, dann kannst du doch einfach 
die nächsten 4 Bauelemente aus entsprechender Tabelle nehmen und sie im 
Program der Köpfen "zuweisen" und fertig.

von Clemens L. (c_l)


Bewertung
0 lesenswert
nicht lesenswert
SELECT row_number() OVER (PARTITION BY Kopf
                          ORDER BY Bauteil) AS Fahrt,
       Kopf,
       Bauteil
FROM EineTabelle
ORDER BY Fahrt, Kopf;

Ist die Reihenfolge pro Kopf wirklich nach Bauteil-Name geordnet? Wenn's 
zufällig sein kann, lass "ORDER BY Bauteil" weg.

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
> Angebommen ich habe eine Tabellle mit Komponenten
>
> Kopf,Bauteil
> 1,A1
> 2,B1
> 3,C1
> 4,D1
> 1,A2
> 2,B2
> 3,C3
> 4,D4
>
> so möchte ich das sortiert haben. Gibt es irgendwie in Sqlite dafür eine
> elegante Lösung?
ORDER BY substr(Bauteil, 2, 1), Kopf;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.