Constantin Kiesling: Problem mit Link-Datenbank

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

  1. 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.

    --
    <img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
    1. 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

  2. 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:

    1. id von private Seiten besorgen:

    $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