Messdaten Importieren, passende Größe finden und Größe exportieren

seppel137

Neuer Benutzer
Beiträge
4
Hallo zusammen,
ich bin neu im Forum und im SQL Leben und hoffe mit einer mySQL Datenbank mein kleines Projekt lösen zu können:
1. Schritt - Import einer "import.csv" mit 4 Spalten: id, Bund, Bauch, Brust (Bsp: 0815, 76, 80, 76)
2. Schritt- Suche der Maße in "größentabelle" >=: Bund, Bauch, Brust, Größe (Bsp: 80, 80, 80, M)
3. Schritt- speichern der Daten in Tabelle "export": id, Größe (Bsp: 0815, M)
Wie stellt man so etwas an, dass direkt beim Import der Daten die Schritt 2 und 3 erfolgen.
Ich hatte mit sortieren und Limit zwar einen kurzen Erfolg jedoch glaube ich da völlig falsch an das Thema herangegangen zu sein.
Ich freue mich schon auf Vorschläge von Euch.

Danke schon mal, Seppel
 
Werbung:
0. Schritt: richtiges Unterforum finden. SQLite != MySQL
1. ich würde dazu COPY verwenden, ich verwende aber auch PostgreSQL. Dort kann man mit COPY direkt CSV-Dateien in eine Tabelle einlesen
2. dazu würde ich einen JOIN verwenden
3. den JOIN aus 2. könnte man direkt in einem VIEW einbauen und hätte damit die Export-Tabelle

Das hat weder was mit sortieren noch mit LIMIT zu tun, sondern mit allereinfachsten SQL-Grundlagen.
 
Für Schritt 1, den Import, kannst Du als Anfänger zB phpMyAdmin benutzen falls das bereits installiert/verfügbar ist.
 
Code:
edb=*# create table import(id int, bund int, bauch int, brust int);
CREATE TABLE
edb=*# insert into import values (815, 76, 80, 76);
INSERT 0 1
edb=*# create table groeszentabelle(bund int, bauch int, brust int, size text);
CREATE TABLE
edb=*# insert into groeszentabelle values (76, 80, 76,'M');
INSERT 0 1

edb=*# select i.id, g.size from import i left join groeszentabelle g on ((i.bund, i.bauch,i.brust) = (g.bund, g.bauch, g.brust));
 id  | size
-----+------
 815 | M
(1 row)

edb=*# create view export as select i.id, g.size from import i left join groeszentabelle g on ((i.bund, i.bauch,i.brust) = (g.bund, g.bauch, g.brust));
CREATE VIEW
edb=*#
edb=*#
edb=*# select * from export ;
 id  | size
-----+------
 815 | M
(1 row)

mal als Fingerübung.
 
die "größentabelle" existiert schon . Dort sind leider, und das ist mein "JOIN" Problem nicht 1:1 die gleichen Daten in den Spalten wie die Messdaten.
Die Messdaten sind in cm Schritten. Die Daten in den Größentabellen sind in unterschiedlichen Schritt, zB. nur jeder 4. oder 5. cm und somit nicht identisch:
Bsp: 74,76,74,S oder 80, 80, 80, M
Ich brauche die nächst größere Größe von den Messdaten. Das geht wohl mit "JOIN" nicht
 
Hi,

das geht schon. Du müsstes nur mal sagen (schreiben) wie sich die nächste Größe errechnet.
Also wenn es z.B. mehrere Einträge gibt und der eine ist beim ersten wert unr 2 entfernt und
der andere beim 2 Wert nur 2 entfernt. Welchen willst du dann ?

Gruß Bernd
 
Ich brauche die nächst größere Größe von den Messdaten. Das geht wohl mit "JOIN" nicht
Doch, doch. ein LATERAL JOIN (den MySQL wohl nicht kennt) kann hier helfen, vereinfachtes Beispiel:

Code:
edb=*# select * from import ;
  id  | bund | bauch | brust
------+------+-------+-------
  815 |   76 |    80 |    76
 4711 |   75 |    81 |    75
(2 rows)

edb=*# select * from groeszentabelle ;
 bund | bauch | brust | size
------+-------+-------+------
   75 |    81 |    76 | M
   99 |    99 |    99 | XXXL
   75 |    80 |    75 | S
(3 rows)

edb=*# select i.id, g.size from import i left join lateral (select * from groeszentabelle g where i.bund <= g.bund limit 1) g on true;
  id  | size
------+------
  815 | XXXL
 4711 | M
(2 rows)

edb=*#

Prüft jetzt nur auf bund. Man könnte noch die Abweichnung zwischen den Werten ermitteln und berücksichtigen.
 
Ich brauche die nächst größere Größe von den Messdaten

Alternativ zu dem Vorschlag von @akretschmer kann man die (unpassende) Größentabelle auch etwas "aufweichen" und eine Transformationstabelle daraus machen.
Dazu müsste man die Spalten verdoppeln und für jeden möglichen Eingangswert den exakten Größenwert festlegen.
Das ist bei diesem Problem etwas Fleißarbeit, aber naturgemäß ziemlich übersichtlich.
Gegenüber einer Vergleichsbedingung hätte es den Vorteil, dass es sehr flexibel ist und problemlos auf irgendwelche modischen Schwankungen reagierne könnte. Ja und es hätte den Vorteil, dass es auch mit funktionsarmen Systemen wie mySQL einfach funktionieren würde.
 
ich komme mit dem Vorschlag noch nicht ganz klar, da die Maße unterschiedliche Prio haben. Soll heißen, zb. bei Hosen muss erst nach der Schrittlänge und dann nach der Bundweite geprüft werden.
Die Bundweiten sind bei den Schrittlängen wiederum identisch. Es gibt oft ca. 8 Schrittlängen und für jede Schrittlänge ca. 10 Bundweiten. Also muss erst die Schrittlänge und dann die Bundweite hergenommen werden.
Das war das, was ich am Anfang mit der Sortiererei versucht hatte. Prima wäre es, wenn man sortierschritte festlegen könnte welche nacheinander ausgeführt werden.
 
Ruf mal kurz an, dann klären wir das und ich mach dir das fertig, da fehlern mir aber noch infos.

Was ist mit export, was ist wenn id doppelt ist .....

Tel.: 02163 / 9879851

Das Ergebnis lege ich dann hier ab.

Gruß

Benrd
 
Werbung:
ich komme mit dem Vorschlag noch nicht ganz klar
Falls Du meinen Vorschlag meinst, hier ist ein vereinfachtes Beispiel für eine Spalte mit abweichenden Werten aus dem Import:

Code:
create table WerteMatrix(WertVorgabe int, WertIst int);
insert into WerteMatrix values 
(50, 48),
(50, 49),
(50, 50),
(50, 51),
(50, 52),
(55, 53),
(55, 54),
(55, 55),
(55, 56),
(55, 57);

create table WerteImport(id int, WertIst int);
insert into WerteImport values 
(1, 48),
(2, 50),
(3, 51),
(4, 55),
(5, 55),
(6, 56);

select i.id, m.* from WerteImport i join WerteMatrix m
on i.wertist = m.wertist;

Ergebnis:



id WertVorgabe WertIst
1 50 48
2 50 50
3 50 51
5 55 55
4 55 55
6 55 56
 
Zurück
Oben