phpbar.de logo

Mailinglisten-Archive

AW: [php] mySQL: Gruppierung auf Feld mit mehreren Inhalten

AW: [php] mySQL: Gruppierung auf Feld mit mehreren Inhalten

Julian Daniel Jimenez Krause php_(at)_phpcenter.de
Mon, 26 Nov 2001 11:44:47 +0100


> folgendes Problem:
> Ich speichere in einer Tabelle ab, wie ein Kunde von uns erfahren hat.
> Mehrfachauswahlen sind dabei möglich. Die Angaben werden per
> Komma getrennt
> in einem einzelnen Feld gespeichert. Ansonsten wäre ich recht
> unflexibel und
> müsste für jede Möglichkeit ein eigenes enum anlegen.
>
> Beispiel:
> user	know
> 1	1,3,6
> 2	2
> 3	1,2
> 4	6

das ist relational-datenbanktheoretisch schlecht (und auch praktisch
schlecht, wie du selber gerade erfährst) ... dieses beispiel ist
exemplarisch für eine n-zu-m-beziehung, der sauber mit 3 tabellen zu lösen
ist:

tabelle user (user_id, username, etc....)
tabelle know (know_id, know_beschreibung)
tabelle user_know (user_id, know_id)

aus deinem beispiel resultiert folgende tabellenbelegung:

user
****
user_id, username, ...
1	   meyer
2        müller
3        krause
4        arnold

know
****
know_id, know_beschreibung
1        aus der zeitung
2        aus der tv-werbung
3        über einer suchmaschine
6        von einem freund

user_know
*********
user_id, know_id
1        1
1        3
1        6
2        2
3        1
3        2
4        6

die darstellung mit 3 tabellen ist nicht nur db-theoretisch sauber, sondern
ermöglicht sehr einfach das gruppieren (eine sql-anweisung), wie du sie
brauchst. darüber hinaus kannst du mit dieser darstellung den
formular-script dynamisch gestalten (bei deiner lösung ist die liste der
"kennenlern-möglichkeiten" bestimmt fest-kodiert). die auswahlliste der
"kennenlern-möglichkeiten" kannst du dynamisch erstellen aus der tabelle
know. der vorteil: ändert sich die tabelle, etwa durch hinzufügen einer
weiteren "möglichkeit", dann ist die änderung automatisch im formular drin.

du kannst natürlich auch aus deiner struktur die gewünschte gruppierung
realisieren -- jedoch nicht mit einer sql-anweisung und fertig, sondern mit
einem script, der die komma getrennten daten als solche interpretiert und
entsprechend gruppiert.

ich empfehle daher, das problem mit 3 tabellen (n-m) zu lösen. ich weiß, es
ist nervig sowas nachträglich zu ändern, aber glaube mir, mit einer
unkorrekten datenstruktur hast du langfristig nur ärger.

gruß
julián daniel


php::bar PHP Wiki   -   Listenarchive