Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

PHP, Mysql, Array





Frage

Wer kann mir ein Tip geben? Möchte Bestellung, Lieferschein bzw. Rechnung in einer Datenbank ablegen. Die Positionen kann man schlecht vorraussehen die dabei anfallen könnten. Ich habe erstmal als notnagel 20 Datenfelder für Pos angelegt. Könnte man das irgendwie mit ARRAY lösen? Die Positionen in einem Array ablegen, in die Datenbank speichern (1 Datenfeld), und wieder auslesen?

Antwort 1 von Supermax

In diesem Fall wäre eine untergeordnete Tabelle für die einzelnen Positionen, die mit der Rechnung über einen eindeutigen Schlüssel (z.B. Rechnungsnummer) verknüpft ist, die optimale Lösung.

Ansonsten kannst du ein Array mittels

$string = serialize($array)


in einen String umwandeln, den du dann z.B. in einem entsprechend dimensionierten TEXT Datenfeld speichern kannst.

Die Umkehrfunktion, die dir aus dem String wieder ein Array macht, lautet

$array = unserialize($string)


Antwort 2 von disco

moin

weiss nicht, ob ich das an deiner formulierung oder meinem mangel an bwl-kenntnissen liegt, dass ich dein problem inicht verstehen.

soweit ich weiss ist die postition ein teil einer rechnung.
ich gehe also davon aus, dass du eine tabelle "rechnung" hast, in der du auch 20 felder für "position" angelegt hast.

wenn dem so ist, ist das blödsinn. du machst eine eigene tabelle für die position auf, die einen fremdschlüssel auf eine rechnung enthält. also eine 1:n beziehung von rechnung zu position.

wenn dem nicht so ist, musst du dein problem besser beschreiben.

g,
disco

Antwort 3 von daniel776

@ disco:

Die Varitante eine zweite Tabelle mit fremdschlüssel anzulegen ist ja schön und gut. Nur was mach ich wenn 20 Pos. vorbelegt sind und es möchte jetzt jemand 23 Pos. bestellen. Dann müsste ich das Script so schreiben das das wenn der Fall eintritt die Datenfelder Pos 1-20. in Tabelle Rechnung um 3 Pos. erhöht wird. Kann man alles machen. Man könnte auch 100 Pos anlegen nur ist dann die Frage ob das sinnvoll ist in der Datenbank soviel Speicherplatz zu reservieren wenn der Fall warscheinlich nie eintritt. Deswegen fragte ich nach der Variante die Supermax geschrieben hat. Ob man diese Positionen vielleicht in ein Datenfeld TEXT speichern kann wo dann 150 Zeichen reserviert sind für Pos bzw. Artikelnummern

Mir geht es jetzt nur um eine Perfekte Lösung wie man sowas abdecken kann.

@ Supermax:

a:2:{s:2:"Rg";s:3:"300";s:7:"bestell";s:3:"400";}

Wie komme ich jetzt an einzelene Datensätze dran?

Antwort 4 von disco

ich weiss nicht ob du nicht verstehst, oder mr nicht klar ist, was eine position ist.

Zitat:
Dann müsste ich das Script so schreiben das das wenn der Fall eintritt die Datenfelder Pos 1-20. in Tabelle Rechnung um 3 Pos. erhöht wird. Kann man alles machen. Man könnte auch 100 Pos anlegen nur ist dann die Frage ob das sinnvoll ist in der Datenbank soviel Speicherplatz zu reservieren wenn der Fall warscheinlich nie eintritt.


wie erhöhen? diese ganzen positionsfelder sind dann nicht mehr nötig, da du eine eigene tabelle für die positionen hast.
wenn eine rechnung eine position mehr haben soll (völlig egal wieveiele), fügst du sie einfach in der tabelle "position" mit einer referenz auf die rechnung(snummer) ein.

so muss das aussehen:

rechnung
{
rechnungsid
kundenid
bla
..
}

position
{
positionsid
rechnung.rechnungsid
...
}

Antwort 5 von daniel776

Ich kann dir sagen woran das liegt.

Du denkst so:

Datenfeld>| ID | Artikelnummer | bestell_nr |
1 600100 1009
2 600101 1009
3 600102 1009
^
|
Datensatz

Und ich denke so:

Datenfeld> | bestell_nr | .... | pos1 | pos2 | pos3 | ....
1009 600100 600101 600102
1010 601101 550052 600550
1011 600100 600222 633000
^
|
Datensatz

Antwort 6 von disco

dann hab ich ja alles richtig verstanden.

würde immer noch ne eigene tabelle für position aufmachen mit einem fremdschlüssel auf "bestell_nr".

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: