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


von Michael H. (overthere)


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) Benutzerseite


Lesenswert?

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

von Michael H. (overthere)


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)


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. (Gast)


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)


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)


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)


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)


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) Benutzerseite


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)


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)


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)


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)


Lesenswert?

1
SELECT row_number() OVER (PARTITION BY Kopf
2
                          ORDER BY Bauteil) AS Fahrt,
3
       Kopf,
4
       Bauteil
5
FROM EineTabelle
6
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)


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?
1
ORDER BY substr(Bauteil, 2, 1), Kopf;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.