Mysql – Rechnungsauswertung – Aufträge

n8schicht

Benutzer
Beiträge
5
Mysql – Rechnungsauswertung – Aufträge

Hallo,
bis dato habe ich meine Speditionsrechnungen immer manuell über Excel – Filter kontrolliert.
Aufgrund von immer mehr Daten und Artikeln – ist es aber im Moment manuell fast nicht mehr möglich eine vernünftige Kontrolle durchzuführen.
Daher habe ich mich dazu entschlossen – eine mysql-Datenbank zu führen – hierzu muss ich aber auch gestehen, dass es mein erstes mysql Projket ist und ich hierbei von Eurer Hilfe angewiesen bin.
Ich würde mich daher freuen, wenn Ihr mir bei meinem Projekt unterstützen könntet!

Vorerst arbeite ich mit den folgenden Tabellen:
+-----------------------------+
| Tables_in_c1_projekte |
+-----------------------------+
| Auftraege_column |
| Auftraege_row |
| Fracht_Rechnungen |
+-----------------------------+

Fracht_Rechnungen
+----------------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| OrderID | varchar(45) | YES | MUL | NULL | |
| Auftrag | varchar(45) | YES | | NULL | |
| Rechnungsnummer | varchar(45) | YES | | NULL | |
| Beladedatum | date | YES | | NULL | |
| Abrechnungs_Sendungsnummer | int(11) | YES | | NULL | |
| Abrechnungs_Belegnummer | int(11) | YES | | NULL | |
| Preis | double | YES | | NULL | |
| Sendungen_Anzahl | int(11) | YES | | NULL | |
| Sendungen_Gewicht | int(11) | YES | | NULL | |
| Sendungen_Land | varchar(45) | YES | | NULL | |
| Sendungen_PLZ | varchar(45) | YES | | NULL | |
| Sendungen_Ort | varchar(45) | YES | | NULL | |
| Sendungsnummer | varchar(45) | YES | | NULL | |
+----------------------------+------------------+------+-----+---------+----------------+

Auftraege_row
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| OrderDoneTimestamp | date | YES | | NULL | |
| RowOrderID | int(6) | YES | MUL | NULL | |
| RowQuantity | int(2) | YES | | NULL | |
| ItemNo | varchar(255) | YES | | NULL | |
| ItemVariationNo | varchar(255) | YES | | NULL | |
| RowWarehouseID | int(1) | YES | | NULL | |
| RowItemID | int(3) | YES | | NULL | |
| RowPositionID | int(6) | NO | PRI | 0 | |
| RowItemText | varchar(221) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+-------+

Auftraege_column
+---------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+-------------+------+-----+---------+-------+
| OrderID | int(11) | NO | MUL | NULL | |
| Order_Kartonanzahl_gesamt | int(6) | YES | | NULL | |
| Fracht_Rechnungsbetrag | float | YES | | NULL | |
| RowWarehouseID | int(2) | YES | | NULL | |
| Bundle_01_Quantity | int(2) | YES | | NULL | |
| Bundle_01_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_01_ItemID | int(10) | YES | | NULL | |
| Bundle_02_Quantity | int(2) | YES | | NULL | |
| Bundle_02_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_02_ItemID | int(10) | YES | | NULL | |
| Bundle_03_Quantity | int(2) | YES | | NULL | |
| Bundle_03_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_03_ItemID | int(10) | YES | | NULL | |
| Bundle_04_Quantity | int(2) | YES | | NULL | |
| Bundle_04_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_04_ItemID | int(10) | YES | | NULL | |
| Bundle_05_Quantity | int(2) | YES | | NULL | |
| Bundle_05_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_05_ItemID | int(10) | YES | | NULL | |
| Bundle_06_Quantity | int(2) | YES | | NULL | |
| Bundle_06_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_06_ItemID | int(10) | YES | | NULL | |
| Bundle_07_Quantity | int(2) | YES | | NULL | |
| Bundle_07_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_07_ItemID | int(10) | YES | | NULL | |
| Bundle_08_Quantity | int(2) | YES | | NULL | |
| Bundle_08_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_08_ItemID | int(10) | YES | | NULL | |
| Bundle_09_Quantity | int(2) | YES | | NULL | |
| Bundle_09_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_09_ItemID | int(10) | YES | | NULL | |
| Bundle_10_Quantity | int(2) | YES | | NULL | |
| Bundle_10_ItemNo | varchar(45) | YES | | NULL | |
| Bundle_10_ItemID | int(10) | YES | | NULL | |
| Product_01_Quantity | int(2) | YES | | NULL | |
| Product_01_ItemNo | varchar(45) | YES | | NULL | |
| Product_01_ItemID | int(10) | YES | | NULL | |
| Product_02_Quantity | int(2) | YES | | NULL | |
| Product_02_ItemNo | varchar(45) | YES | | NULL | |
| Product_02_ItemID | int(10) | YES | | NULL | |
| Product_03_Quantity | int(2) | YES | | NULL | |
| Product_03_ItemNo | varchar(45) | YES | | NULL | |
| Product_03_ItemID | int(10) | YES | | NULL | |
| Product_04_Quantity | int(2) | YES | | NULL | |
| Product_04_ItemNo | varchar(45) | YES | | NULL | |
| Product_04_ItemID | int(10) | YES | | NULL | |
| Product_05_Quantity | int(2) | YES | | NULL | |
| Product_05_ItemNo | varchar(45) | YES | | NULL | |
| Product_05_ItemID | int(10) | YES | | NULL | |
| Product_06_Quantity | int(2) | YES | | NULL | |
| Product_06_ItemNo | varchar(45) | YES | | NULL | |
| Product_06_ItemID | int(10) | YES | | NULL | |
| Product_07_Quantity | int(2) | YES | | NULL | |
| Product_07_ItemNo | varchar(45) | YES | | NULL | |
| Product_07_ItemID | int(10) | YES | | NULL | |
| Product_08_Quantity | int(2) | YES | | NULL | |
| Product_08_ItemNo | varchar(45) | YES | | NULL | |
| Product_08_ItemID | int(10) | YES | | NULL | |
| Product_09_Quantity | int(2) | YES | | NULL | |
| Product_09_ItemNo | varchar(45) | YES | | NULL | |
| Product_09_ItemID | int(10) | YES | | NULL | |
| Product_10_Quantity | int(2) | YES | | NULL | |
| Product_10_ItemNo | varchar(45) | YES | | NULL | |
| Product_10_ItemID | int(10) | YES | | NULL | |
| Product_11_Quantity | int(2) | YES | | NULL | |
| Product_11_ItemNo | varchar(45) | YES | | NULL | |
| Product_11_ItemID | int(10) | YES | | NULL | |
| Product_12_Quantity | int(2) | YES | | NULL | |
| Product_12_ItemNo | varchar(45) | YES | | NULL | |
| Product_12_ItemID | int(10) | YES | | NULL | |
| Product_13_Quantity | int(2) | YES | | NULL | |
| Product_13_ItemNo | varchar(45) | YES | | NULL | |
| Product_13_ItemID | int(10) | YES | | NULL | |
| Product_14_Quantity | int(2) | YES | | NULL | |
| Product_14_ItemNo | varchar(45) | YES | | NULL | |
| Product_14_ItemID | int(10) | YES | | NULL | |
| Product_15_Quantity | int(2) | YES | | NULL | |
| Product_15_ItemNo | varchar(45) | YES | | NULL | |
| Product_15_ItemID | int(10) | YES | | NULL | |
+---------------------------+-------------+------+-----+---------+-------+
 
Zuletzt bearbeitet:
Werbung:
ich vermisse eine Frage...

  • wo gibt es Postleitzahlen die 45 Zeichen lang sind?
  • ich sehe keine Foreign Keys zwischen den Tabellen
  • durchnummerierte Spalten sind meist ein Zeichen kaputten Tabellendesigns
  • diverse Sendungsnummern mal int, mal varchar
 
Meine erste Aufgabe ist es jetzt, die Tabelle
Auftraege_column
mit den Daten aus der Tabelle
Auftraege_row
zu befüllen bzw. zu transponieren.

Dabei gibt es folgendes zu beachten bzw. zu berücksichtigen:
Column RowItemText
enthält einen String bei dem am Anfang folgendes steht:
[Bundle] lorem ipsum oder
[-] lorem ipsum
lorem ipsum

[Bundle] -> heißt, dass dies ein Bundle-Artikel ist, der keinen physikalischen Lagerbestand aufweist und aus den dann folgenden Artikeln mit [-] besteht.
Weiterhin gibt es Artikel ohne [] - diese sind normale Artikel.

Meine Abfrage müsste also prüfen und wie folgt übertragen:

wenn
Auftraege_row.RowItemText enthält [Bundle]
dann
Auftraege_row.RowQuantity -> Auftraege_column.Bundle_01_Quantity
Auftraege_row.ItemNo -> Auftraege_column.Bundle_01_ItemNo
Auftraege_row.RowItemID -> Auftraege_column.Bundle_01_ItemID

sonst
Auftraege_row.RowQuantity -> Auftraege_column.Product_01_Quantity
Auftraege_row.ItemNo -> Auftraege_column.Product_01_ItemNo
Auftraege_row.RowItemID -> Auftraege_column.Product_01_ItemID

aber - nun kommt es ja dazu, dass eine OrderID nicht immer nur aus einem Artikel besteht.
Daher muss ja auch noch geprüft werden - wieviele Bundle es gibt - und das wievielte Produkt hinterlegt werden muss.

siehe
Auftraege_column.Bundle_01
Auftraege_column.Bundle_02
Auftraege_column.Bundle_0.....

Anbei ein Auszug aus der Tabelle:
Auftraege_row
upload_2017-9-28_17-33-54.png
 
Das sieht alles nach Murks aus. Außerdem nach einer Tabellenkalkulation. Das geht schon los, daß Datenbanktabellen keine Sortierung an sich haben, Du dies aber offenbar erwartest, suehe: "heißt, dass dies ein Bundle-Artikel ist, der keinen physikalischen Lagerbestand aufweist und aus den dann folgenden Artikeln mit [-] besteht."
Dazu kommen die in meiner ersten Antwort genannten Dinge.
 
@akretschmer
Das mag sein - dass dies alles Murks ist - fange ja gerade erst damit an.
Habe noch nie sowas gemacht!

Ich habe leider keinen Freund im Freundeskreis der etwas mit Datenbanken zu tun hat - sonst wäre ich dort mit ein zwei Bierchen aufgeschlagen....

Brauche halt jemanden der mir hilft!

Die Daten erhalte ich jeweils aus zwei csv-Files - die Datenbank habe ich so erst einmal selbst angelegt.
Wie würdest Du es besser machen?
 
Zuletzt bearbeitet:
Werbung:
Wie würdest Du es besser machen?

schwer zu sagen, dazu müßte man mehr wissen, was an Daten kommt und was an Auswertungen benötigt wird. Üblicherweise hat man Kunden. Die Daten dazu sammelt man in einer Kundentabelle. Kunden generieren Aufträge. Also eine weitere Tabelle, welche dann z.B. Foreign Keys zu dem Kunden hat. Aufträge haben Positionen. Noch eine Tabelle. In den Positionen stehen Artikel. Du ahnst es: neue Tabelle für Artikel. Diese hat einen Primary Key, die Positionstabelle für die Aufträge Foreign Keys auf die Artikel.

Deine eine Tabelle, mit den vielen Produkt_NN - Spalten: was machst Du, wenn mal ein Kunde statt NN Artikel (also was Du an Spalten hast) plötzlich NN + 267 Artikel in einem Auftrag bestellt? Kunde droht mit Auftrag, und Du gehst pleite, weil Du das nicht abbilden kannst?
 
Zurück
Oben