Frage DB Aufbau für mehrere Kategorien

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

webana

Mitglied
19 März 2012
154
5
18
Im Allgäu
Hallo,

ich habe eine Wort Datenbank. Bis jetzt habe ich eine spalte namens Kategorie, bei der die Kategorie ID wenn nötig eingetragen ist.

Jetzt bin ich dabei das neu aufzubauen, da ich damals einen kleinen Fehler gemacht habe. Jetzt ist mir aber noch eingefallen, das ein Eintag zu mehreren Kategorien passen würde.

Wie würdet ihr die Tabelle aufbauen.

Beispiel:

id - kategorie
1 - Gattungsname
2 - Hersteller

text - kategorie - beschreibung
Flex - 1,2 - Lorem ipsum ...

Flex zb ist beides, Gattungsname für Winkelschleifer und Hersteller von Elektrowerkzeuge.

Gruß Alex
 

B3nnoX

Aktives Mitglied
9 Januar 2013
533
106
43
table1
id - text - beschreibung
1 - Flex - Lorem Ipsum...

table2
id - kategorie
1 - Gestattungsname
2 - Hersteller

Pk_table1 - Pk_table2
1 - 1
1 - 2

Ich hoffe das ist verständlich ;)
 

webana

Mitglied
19 März 2012
154
5
18
Im Allgäu
Hallo,

ja, dritte Tabelle in der die Einträge mit den Kategorien verknüpft werden... wäre ich nie darauf gekommen obwohl einleuchtend und einfach ...

Danke Dir!

Gruß Alex
 

webana

Mitglied
19 März 2012
154
5
18
Im Allgäu
Hallo,

ich nehme mal an, das man die mit join verbindet ... Hab da mal etwas gegooglet, versteh es aber nicht so ganz ...

Irgendwie waren da auch nur 2 Tabellen, ich habe aber 3.

Gruß Alex
 

B3nnoX

Aktives Mitglied
9 Januar 2013
533
106
43
Ja, das wird mit einem Join verbunden. Ich gebe da nochmal ein Beispiel, bzw. 2 Beispiele.
In dem ersten würdest du in deinem result einzelne Datensätze bekommen pro Kategorie. also wie folgt

Result Beispiel 1:
id - text - beschreibung - kategorie
1 - Flex - Lorem Ipsum... - Gestattungsname
1 - Flex - Lorem Ipsum... - Hersteller

Es gibt nun aber noch ein Beispiel wo du nur ein Datensatz bekommst und die Kategorien zusammen geführt werden, also mit einem Komma getrennt werden.

Result Beispiel 2:
id - text - beschreibung - kategorie
1 - Flex - Lorem Ipsum... - Gestattungsname, Hersteller


SQL:
/* Beispiel 1 */
SELECT
   t1.id,
   t1.text,
   t1.beschreibung,
   t2.kategorie
FROM
   t1
JOIN t1_t2 ON t1.id = t1_t2.Pk_table1
JOIN t2 ON t1_t2.Pk_table2 = t2.id
ORDER BY
  t1.id ASC

/* ----------------------------------------------- */

/* Beispiel 2 */
SELECT
 t1.id,
 t1.text,
 t1.beschreibung,
 GROUP_CONCAT(t2.kategorie SEPERATOR ', ') kategorie
FROM
 t1
JOIN t1_t2 ON t1.id = t1_t2.Pk_table1
JOIN t2 ON t1_t2.Pk_table2 = t2.id
GROUB BY
   t1.id
ORDER BY
   t1.id ASC
 
  • Like
Reaktionen: webana

webana

Mitglied
19 März 2012
154
5
18
Im Allgäu
Heute morgen bin ich mal auf die Idee gekommen und nach "sql join 3 tabellen" zu suchen ...

Sehe ich das richtig, das ich beim ersten Beispiel = kategorie und beim 2. LIKE %kategorie% schreiben muss?

Probiere es gleich mal aus ...

Danke,

Gruß Alex
 

webana

Mitglied
19 März 2012
154
5
18
Im Allgäu
Hallo,

das erste funktioniert schon mal, aber wenn ich ja eine normal Auflistung ausgebe zb text LIKE schul% muss ich ja das zweite Beispiel nehmen, da ich ja sonnst je nach Kategorien das mehrmals bekommen würde.

EDIT: Jetzt ist mir aber noch aufgefallen, das Inhalt der keiner Kategorie zugewiesen wurde, in beiden fällen nicht angezeigt wird.

Muss jeder Eintrag einer Kategorie zugewiesen werden?

Alex
 
Zuletzt bearbeitet:

B3nnoX

Aktives Mitglied
9 Januar 2013
533
106
43
Ich müsste nun lügen ob der Befehl JOIN gleich der INNER JOIN ist. Setz mal vor den JOIN noch ein LEFT. Also LEFT JOIN.

Und bei den Beispielen wollte ich nur mal beide aufgelistet haben, da einigen schon manchmal reicht wenn es zweimal im result auftaucht.
 
  • Like
Reaktionen: webana
Werbung: