PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Entwicklung und Softwaredesign (http://www.selfphp.de/forum/forumdisplay.php?f=14)
-   -   generelles Logikproblem (http://www.selfphp.de/forum/showthread.php?t=22304)

tsunamitsunami 26.10.2009 16:44:54

generelles Logikproblem
 
Hallo Forum,

ich habe mal ein grundsätzliches Logikproblem. Also:

Wenn ich zB einen shop habe, habe ich verschiedene Gruppen: Blumentöpfe, Radios, PCs.
Je nach Gruppe habe ich verschiedene Eckdaten:

Beim Blumentopf: Volumen, Material, Farbe,Durchmesser, Form,usw.
Beim PC: Speicher, CPU, LAN, HDD, usw
Beim Radio: USB, Sendeplätze, Leistung, Freisprecheinrichtung, MP3,usw.

Wie bekomme ich eine flexible Artikelverwaltung hin?

Die erste Idee war eine lange Tabelle mit allen Beschreibungen und als Standartwert unwichtig.
Als Auswahl dann alle Werte wo !=“unwichtig“
Allerdings wird die Tabelle dann sehr lang und unübersichtlich.

Dann hatte ich die Idee das Ganze an einer Gruppe fest zu machen. Also wenn gruppe=1 nehme Tabelle pcs, wenn gruppe=2 nehme Tabelle blumentöpfe. Bei der Erfassung neuer Artikel dann via select als erstes die Gruppe wählen, die per javascript abschicken und dann die die Felder generieren.

Ein weitere Ansatz war die Überschriften zu den Gruppen als String zusammen mit den tabellennamen in einer Tabelle ab zu speichern:
1 „cputakt,speicher,hdd,kartenleser,brenner“ pcs;
2 „aussendurchmesser,innendurchmesser,höhe,farbe“ blumentoepfe;
3 „sendeplätze,usb,mp3,leistung,freisprecheinrichtung“radios;
Ein array generieren und darau ein Formular basteln.

Bei allen Ansätzen scheitere ich an der fehlenden Dynamik beim speichern. Natürlich kann ich sagen
if(klasse=1) insert into pcs...
else if(klasse=2) insert into blumentoepfe...
else if(klasse=3) insert into autoradios...

Kommt dann eine Gruppe z.B. Lampen hinzu, müsste ich manuell eine weitere else if Anweisung einfügen.

Gibt es dafür ein Patenrezept? Das Problem müsste doch eigendlich jeder Shopentwickler haben.
Wie löse ich sowas sauber? Danke für eure Mühe
Gruß
tsunamitsunami

vt1816 26.10.2009 16:53:06

AW: generelles Logikproblem
 
Zitat:

Zitat von tsunamitsunami (Beitrag 131684)
[...]
Bei allen Ansätzen scheitere ich an der fehlenden Dynamik beim speichern. Natürlich kann ich sagen
if(klasse=1) insert into pcs...
else if(klasse=2) insert into blumentoepfe...
else if(klasse=3) insert into autoradios...

Kommt dann eine Gruppe z.B. Lampen hinzu, müsste ich manuell eine weitere else if Anweisung einfügen.

Gibt es dafür ein Patenrezept? Das Problem müsste doch eigendlich jeder Shopentwickler haben.
Wie löse ich sowas sauber? Danke für eure Mühe
Gruß
tsunamitsunami

Da solltest Du mit Array's weiterkommen...

Alle benötigten Dateinamen ins Array und Klasse=1 entspricht dem Array-Index.

feuervogel 26.10.2009 16:54:26

AW: generelles Logikproblem
 
du hast eine tabelle kategorien

id | name
1 | blumentopf

dann gibts für alle kategorien eine tabelle mit attributen

id | kat_id | name | default_value | type
1 | 1 | | Volumen | 0 | numeric

und dann noch eine tabelle mit werten

id | a_id | article_id | value
1 | 1 | 1 | 25

und dann kann der admin eine neue artikel-kategorie anlegen, dafür die attribute definieren, für die artikel dann ne kategorie aussuchen und die passenden werte eintragen.

tsunamitsunami 26.10.2009 17:28:59

AW: generelles Logikproblem
 
Hallo,
das ging ja schnell! Danke! :)

@Feuervogel. So ähnlich war meine Idee2 ja auch.
Das würde, wenn ichs richtig verstanden habe, heissen, nicht neuen Artikel hinzufügen, sondern Neuen PC hinzufügen, Neues Autoradio hinzufügen, Neuen Blumentopf hinzufügen usw., oder?

@vt1816. Das klingt ähnlich wie meine 3. Idee.

PHP-Code:


$array
[1]="cpu,speicher,hdd";
$array[2]="sendeplaetze,usb,mp3,leistung";
... 

... und dann eine DB-Tabelle Artikel mit den Spalten: ID, Klasse und Beschreibung.
Unter Beschreibung steht dann ein fest definierter string?
Sehr guter Ansatz...
Aber auch dann müsste ich sagen Neuer PC, Neuer Topf, Neues Radio usw. statt Neuer Artikel, oder?

bisher habe ich halt:
id Artikelname guppe_id objektwert genauebeschreibung
1 Gamer PC 1 6000 19
2 Kaktustopf 2 23 19

Wenn gruppe_id=1 suche in Tabelle pc nach id 19. Wenn gruppe:id=2 suche in Tabelle blumentopf nach id 19. Geht so also wohl nicht und ich muss das Ganze unterteilen, oder bin ich auf dem Holzweg?

tsunamitsunami 26.10.2009 18:13:58

AW: generelles Logikproblem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nochmal @feuervogel zum Verständnis:
Dann würde die Tabelle Werte doch in etwa so aussehen. Anhang...

feuervogel 27.10.2009 15:01:12

AW: generelles Logikproblem
 
Zitat:

Zitat von tsunamitsunami (Beitrag 131694)
Nochmal @feuervogel zum Verständnis:
Dann würde die Tabelle Werte doch in etwa so aussehen. Anhang...

ja, so in etwa dachte ich mir das.

tsunamitsunami 27.10.2009 15:16:53

AW: generelles Logikproblem
 
Danke für eure Hilfe! Ich denke damit werde ich weiterkommen.

tsunamitsunami 04.11.2009 12:49:40

AW: generelles Logikproblem
 
Hallo zusammen!

Wen es interessiert: Ich habe es nun teil-lösen können. Alerdings sehr unbefriedigend:

--
Ausgabe aller Schuhe:
PHP-Code:

$sql_sub="select objekte.wert, attribute.attributname,objekte.objekt_id from attribute,objekte,kathegorien
 where attribute.kathegorie_id=1 and kathegorien.id=attribute.kathegorie_id and attribute.id=objekte.attribut_id AND attribute.attributname != 'id' order by objekte.objekt_id"
;
     
$letzteproduktid=0;
 
$mssub=mysql_query($sql_sub);  $letzterwert="0";
 while(
$ausgabe_schuhx=mysql_fetch_assoc($mssub))
{       if(
$letzteproduktid != $ausgabe_schuhx["objekt_id"])echo " <td class='datenzelle'>&nbsp;</td></tr><tr>";  
        if(
in_array($ausgabe_schuhx["attributname"],$wichtigschuharray))
        print 
"<td class='datenzelle'>".$ausgabe_schuhx["wert"]."</td>";
        
$letzteproduktid $ausgabe_personx["objekt_id"];
    } 

Zitat:

if(in_array($ausgabe_schuhx["attributname"],$wichtigschuharray))
Dient nur zu Filterzwecken. Felder wie id und timestamp will ich nicht ausgeben.
Ich möchte erstmal eine Grobübersicht haben. Mehr später im Tooltipp.

So funktioniert es.
Nun habe ich aber ein Problem, wenn die Werte aus irgend einem Grund mal nicht in der selben Reihenfolge in der Spalte stehen...
Und: Wie kann ich sowas sortieren/filtern? ZB nach Schuhersteller. Die Werte stehen ja in der Spalte Wert untereinander. Die sind über die Tabelle attribute verknüpft.

Also Tabelle attribute:

id|kathegorie_id|attributname
1|1|Größe
2|1|Hersteller
3|2|cpu

Tabelle kathegorien:

id|Name
1|PCs
2|Schuhe
3|Blumentöpfe

Tabelle Werte:
id|attribut_id|objekt_id|wert
1|1|1|Tower
2|2|1|HP
3|3|1|3.4

Soll heissen Kathegorie 1(PCs) Objekt1(also PC1) Attribute 1-3.
In der gleichen Spalte stehen aber auch Farbe eines Blumentopfs oder Schuhgröße.
zB 3(Blumentöpfe) Objekt3(also Topf3) Attribute 1-3.

Ihr hattet mir ja schon geraten, das ganze in ein Array zu packen.

Das war auch ein Ansatz. Den attribut-Namen als Schlüssel nehmen und die Objektwerte dahinterpacken.

PHP-Code:

while($ausgabe=mysql_fetch_assoc($msquery))
{
$schuharray[$ausgabe['attributname']]=$ausgabe['objektwert']


Aber ich habe die Unterteilung des Arrays in die einzelnen Objekte nicht hinbekommen.
Der Array-Schlüssel muss eindeutig sein und in meinem Fall habe ich zB mehrere PCs in der Datenbank. Ich müsste also das Array
füllen. Sortieren. Ausgeben. leeren.
füllen. Sortieren...
Eine Idee wäre noch mehrere Arrays zu erzeugen jeweils mit der Objektid als Anhängsel.
Aber das ist doch Müll, oder? Vor allem, wenn da zB "nur" 100 PCs in der DB sind.
--
Bin schon fast so weit, wieder zu den Wurzeln zurück zu gehen und einfach den Tabellennamen mit zu übergeben.
PHP-Code:

$sql="select * from ".$_GET['tabellenname']... 

Für jede Kathegorie eigene Formulare zu nehmen und gut.

Weil so scheint es nicht lösbar zu sein. Vor allem wenn ich zB noch filtern oder sortieren möchte.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:23:38 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.