Problem mit Link-Datenbank
Constantin Kiesling
- php
0 Z.N.S.0 Tom
0 Uschi Renziehausen
Hallo liebe Community!
Ich stehe vor einem Problem... Ich will mir eine Link-Datenbank anlegen und dabei die Links in diverse gruppen unterteilen (z.B. Foren, Private Seiten, Ersatzteilverkäufer etc.). Deswegen gibt es eine eigene Spalte in der Tabelle, wo die Gruppe definiert ist.
Jetzt besteht aber die Möglichkeit, dass ein Link zu zwei Gruppen dazupasst... z.B. Ersatzteilverkäufer und Private Seiten, da es einige Privatpersonen gibt, die auch mit Ersatzteilen handeln. Ich will jetzt aber den Link nicht zweimal mit verschiedener Gruppendefinition eintragen müssen, deswegen kommt in die Gruppen-Spalte einfach "ersatzteile,privat" statt ein Eintrag mit "ersatzteile" und ein Eintrag mit "privat".
Beim abrufen taucht jetzt mein Problem auf: Ich will z.B. auf einer Seite nur die Ersatzteile-Links anzeigen und brauche deswegen eine Anfrage wie folgt:
Alle Zeilen ausgeben, die in der Spalte "gruppe" den Wert "ersatzteile" enthalten.
Wichtig ist das "enthalten", nicht "ist gleich", da ja nicht immer nur "ersatzteile" in der Gruppen-Spalte steht.
Meine Frage nun: Wie kann ich bewerkstelligen, dass der Wert in der Spalte "gruppe" daraufhin überprüft wird, ob er "ersatzteile" (oder irgendwas anderes) ENTHÄLT?
Ich würde mich wirklich über eure Hilfe freuen!
MfG,
Consti
abend,
du kannst dir mit "SELECT * from Links WHERE kategorie LIKE '%ersatzteile%'";
alle datensätze ausgeben lassen, die im Feld _kategorie_ das wort _ersatzteile_
beinhalten...
HIH
mfg,
(tanz das)
Z.N.S.
Hallo,
das ist ein typisches Beispiel für ein Mehrwertiges Attribut. Das Feld müsste also gleichzeitig mehrere Werte aufnehmen. Da sollte man dann normalisieren.
Mach eine zweite Tabelle auf, in der Du die Klassenzugehörigkeiten als Eigenschafts-Datensatz speicherst.
Wenn einer zu zwei Grippen gehört, hat er da eben zwei Datensätez und wenn einer zu sieben Gruppen gehört hat eben sieben Datensätze ...
Grüße
Tom
Moin Constantin,
bei deinem Problem führt mehr als ein Weg nach Rom, einer ist dieser:
mach 3 tabellen:
Tabelle 1 ist für die Rubriken da:
tb_rubrik
id = autoincrement
rubrik = VARCHAR 32 oder so für den Titel der Rubrik
reihenfolge = INT 3 (da kannst du die Reihenfolge festlegen, in der die Rubriken anzeigt werden können).
Tabelle 2 speichert die Links
tb_link
id = autoincrement
url = die URL halt
label = Verweistext für die URL
Tabelle 3 verknüpft die Kategorien mit den Links im Verhältnis 1 zu n
tb_assoc
rubrik_id = Fremdschlüssel aus tb_rubrik
link_id = Fremdschlüssel aus tb_link
Nehmen wir an, in tb_rubrik hast du die folgenden drei Datensätze:
id rubrik reihenfolge
1 Foren 1
2 Ersatzteilhändler 3
3 Private Seiten 2
In tb_link hast du einen Datensatz für die Seite von Claire Grube, die du sowohl den privaten Seiten als auch den Ersatzteilhändlern zuordnen möchtest.
Außerdem gibt es noch die Seite von Axel Schweiß, die aber rein privat ist.
id url label
34 http://www.claire-grube.de Claire Grubes Kloschüsselseite
147 http://www.axel-schweiss.de Axel Schweiß - Die Seite über Deos
In tb_assoc steht dann
rubrik_id url_id
2 34
3 34
3 147
Wenn du jetzt die privaten Seiten anzeigen lassen möchtest:
$q = "SELECT * FROM tb_rubrik WHERE label='Private Seiten'";
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$rubrik_id = $row['id'];
In $rubrik_id steht jetzt die 3. Mit der ziehst du jetzt los und sammelst deine zugehörigen Links. Das SQL-Statement dazu müßte ich erstmal testen, auf Anhieb und blind kriege ich das nie hin. Ungefähr geht es glaube ich so:
SELECT tb_assoc.url_id, tb_assoc.rubrik_id, tb_link.url, tb_link.label FROM tb_assoc, tb_url WHERE tb_assoc.rubrik_id='$rubrik_id' AND tb_url.id='$tb_assoc.url_id':
Liebe Grüße, Uschi