php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.03.2010, 20:20  
Neuer Benutzer
 
Registriert seit: 08.03.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
klaba befindet sich auf einem aufstrebenden Ast
Standard Konzeptfrage: Wie bestimmte Kategorien in einer DB ordentlich umsetzen

Hallo Forum

bin neu hier, würde mich als "fortgeschrittener Anfänger" bezeichnen und bin aber momentan ein wenig eingerostet mit meinen PHP/SQL Kenntnissen. Es gibt da gerade eine Fragestellung, die mir einfach den Kopf zerbricht, und ich nicht weiß, wie man das am klügsten aber gleichzeitig simpel umsetzen könnte. Vielleicht kann man mir hier etwas weiterhelfen oder Denkansätze geben.

Also: Es geht um eine Teiledatenbank. Dabei werden bestimmte Einträge einer Kategorie (derer es nur eine handvoll gibt) und mindestens einem Modell zugeordnet, in das es passt. Einfaches Beispiel: "Schraube XY", Kategorie: "Kleinteil", Modell: "Audi A3".

Nun, mein Problem ist die Geschichte mit dem Modell, da hier mehrere möglich sein sollen. Ich habe das bereits ausprobiert und habe einfach eine Menge Felder in der DB angelegt, Beispiel "A2", "A3" und so weiter. Diese sind standardmäßig NULL, wenn ein Teil irgendwo dazu passt, gibts eben eine 1. (z.B. "schraube, kleinteil, 1, 0, 0, 1 ...")

Es funktioniert auch soweit, man kann durch dieses Konzept wunderbar eine Seite basteln, die es ermöglicht, durch Kategorien und Modelle zu navigieren. Also zum Beispiel die Liste aller "Kleinteile" zum Modell XY. Mein Problem ist eher die Erweiterbarkeit. Sofern man ein neues Modell einpflegen möchte, muss ein neues Feld angelegt werden, viele Scripte angepasst werden (alle die für das hinzufügen und bearbeiten zuständig sind bspw.), und überhaupt hat man eben eine ganze Menge an Feldern pro Eintrag.

Daher die Frage: Könnte man dies etwas klüger gestalten, und wenn ja natürlich: Wie?? Ich würde mich über ein paar Tipps sehr freuen.
klaba ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.03.2010, 20:42  
Benutzer
 
Registriert seit: 21.02.2010
Beiträge: 78
PHP-Kenntnisse:
Anfänger
comlar befindet sich auf einem aufstrebenden Ast
Standard

Wie wäre es mit einer Tabelle wie folgt:

Modell-ID
Kleinteil-ID

(Oder habe ich das mit der Zuordnung falsch verstanden?)
comlar ist offline   Mit Zitat antworten
Alt 08.03.2010, 20:49  
Neuer Benutzer
 
Registriert seit: 08.03.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
klaba befindet sich auf einem aufstrebenden Ast
Standard

Danke erstmal für die Antwort. Nun, ich weiß gerade auch nicht, wie du das meinst

Vielleicht habe ich mich auch etwas ungeschickt ausgedrückt. Ich habe meinetwegen 20 Modelle, die als Option für einen Eintrag in fragen kommen, Mehrfachnennungen aber eben möglich. Bislang waren die Tabelleneinträge recht lange, weil dann z.B. 20 Felder am Eintrag mit dran waren... "Modell 1", "Modell 2" und so weiter. Jeweils mit 0 oder 1 abgespeichert. Das Prinzip funktioniert auch, nur ist es meiner Meinung nach schlecht oder umständlich erweiterbar. Daher die Frage ob man das intelligenter lösen kann. Ich möchte nachher aber eben auch solche Abfragen machen wie "zeige mir alle Teile aus Kategorie Kleinteile, die zu Modell 7 passen".
klaba ist offline   Mit Zitat antworten
Alt 08.03.2010, 20:55  
Benutzer
 
Registriert seit: 21.02.2010
Beiträge: 78
PHP-Kenntnisse:
Anfänger
comlar befindet sich auf einem aufstrebenden Ast
Standard

Ok, dann versuche ich es nochmal:

Erstelle doch eine extra Tabelle. In Spalte 1 steht das Modell drin (also z.B. Modell-ID). In der zweiten Spalte das Kleinteil (Kleinteil-ID).

Dann kannst du dort alles eintragen. Beispiel:

Tabelle Modell
ID: 1
Modell : A2
ID: 2
Modell : A3

Tabelle Kleinteile
ID : 1
Bezeichnung : Reifen 15"
ID : 2
Bezeichnung : Felge
ID : 3
Bezeichnung : Kotflügel
ID : 4
Bezeichnung : Reifen 16"

Und dann die Verknüpfungstabelle (z.b. Beziehungen)
Modell-ID : 1
Kleinteil-ID : 1
Modell-ID : 1
Kleinteil-ID : 4

Damit geht auch die Abfrage, die du willst:
SELECT * FROM Beziehungen WHERE Modell-ID = 1

oder
SELECT * FROM Beziehungen WHERE Kleinteil-ID = 1 AND Modell-ID = 7
comlar ist offline   Mit Zitat antworten
Alt 08.03.2010, 21:06  
Neuer Benutzer
 
Registriert seit: 08.03.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
klaba befindet sich auf einem aufstrebenden Ast
Standard

Ah, ich verstehe nun was du meinst

Mir war auch irgendwie klar, dass es mit einer Beziehungstabelle funktionieren müsste, stand aber wirklich auf dem Schlauch, da ich nicht wusste, wie ich auch mehrere Kategorien (wie das Beispiel "Kleinteile") unterbringen sollte. Du hast das ja jetzt über eine weitere Tabelle (Kleinteile) gemacht. Das heißt, hätte ich noch z.B. die Kategorie "Bremsen", würde ich diese einfach auch als eigene Tabelle anlegen, richtig?! Womit die Beziehungen eben noch um eine weitere ID erweitert werden würden, in der Form "Kategorie-ID 1 = Kleinteile", "Kategorie-ID 2 = Bremsen" oder etwas in der Art (rein anschaulich).

Denke ich damit soweit richtig?
klaba ist offline   Mit Zitat antworten
Alt 09.03.2010, 09:09  
Erfahrener Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 291
PHP-Kenntnisse:
Fortgeschritten
KarlEgon befindet sich auf einem aufstrebenden Ast
Standard

Ich würde die Kategorien auch noch in eine seperate Tabelle auslagern und nicht für jede Kategorie eine eigene Tabelle anlegen, weil dann bist du auch wieder bei dem Problem der Erweiterbarkeit.
Folgende Tabellen solltest du dann in Etwa haben:
Kategorie
Verknüpfung_KategorieTeile
Teile
Verknüpfung_TeileModell
Modell
KarlEgon ist offline   Mit Zitat antworten
Alt 09.03.2010, 09:46  
Benutzer
 
Registriert seit: 21.02.2010
Beiträge: 78
PHP-Kenntnisse:
Anfänger
comlar befindet sich auf einem aufstrebenden Ast
Standard

Mir hat man mal gesagt: Alles was man zusammenfassen kann und das sich wiederholt sollte eine eigene Tabelle bekommen.

Somit stimme ich KarlEgon.

Denn damit lässt sich die Datenbank am leichtesten erweitern. Bevor man in eine Tabelle "Teile" für jedes Modell eine Spalte anlegt (und dann noch zig SQL-Aufrufe im Quellcode anpassen muß), legt man einfacher eine eigene Modell-Tabelle an und in der Teile-Tabelle eine Spalte, in die die Modell-ID reinkommt.
comlar ist offline   Mit Zitat antworten
Alt 09.03.2010, 09:46  
Neuer Benutzer
 
Registriert seit: 08.03.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
klaba befindet sich auf einem aufstrebenden Ast
Standard

Danke... ja ich glaube, so komme ich damit hin
klaba ist offline   Mit Zitat antworten
Alt 13.03.2010, 21:31  
Neuer Benutzer
 
Registriert seit: 08.03.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
klaba befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

jetzt muss ich doch nochmal kurz nachhaken, weil ich gerade wieder ein wenig verwirrt bin Ich frage mich gerade, ob für eine solche Abfrage eigentlich zwingend ein JOIN nötig ist?! Damit habe ich nämlich leider noch nicht gearbeitet und genau deshalb verwirren mich gerade diverse SQL-Manual Geschichten zum Thema.

Damit es auch nicht missverständlich wird, möchte ich das schnell anhand von einem kleinen Beispiel veranschaulichen:

Ich nehme einfach zwei ganz simple, fiktive Tabellen, einmal die Tabelle "Teile" und dann die Tabelle "Modelle". Nehmen wir mal an, "Teile" sieht so aus:

Teil-ID, Bezeichnung, Kategorie

1, Felge, Räder
2, Kotflügel, Karosserie

Nun sei Modelle folgendermaßen:

Teil-ID, Modell-ID

1, 1
1, 2
2, 3

Das würde als heißen, Teil 1 (Felge) passt in Modell Nr. 1 und in Modell Nr. 2, während das zweite Teil (Kotflügel) nur in Modell Nr. 3 passt.

Wie würde nun hierfür die korrekte Abfrage lauten und benötigt man dafür zwingend einen JOIN? Angenommen, ich möchte alle Teile der Kategorie Räder anzeigen, die in Modell 2 passen.

Geändert von klaba (15.03.2010 um 11:12 Uhr).
klaba ist offline   Mit Zitat antworten
Alt 18.03.2010, 09:31  
Erfahrener Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 291
PHP-Kenntnisse:
Fortgeschritten
KarlEgon befindet sich auf einem aufstrebenden Ast
Standard

Code:
SELECT * FROM Teile INNER JOIN Modelle ON Teile.ID = Modelle.TeileID WHERE Modelle.ID = 2
KarlEgon ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Unterschiedene Kategorien nach einen anklick ombolo30 PHP Tipps 2009 1 03.05.2009 22:47
Kategorien ombolo30 PHP Tipps 2009 1 02.05.2009 12:09
[Erledigt] Kategorien in Baumstruktur PHP Tipps 2005 11 08.02.2005 22:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
kategorien aus der db hinzufühgen php, kategorien, kategorien php, kategorien tabellen

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum