PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mysql Select



Patrick
19-04-2003, 10:18
Ich möchte eine Bilderdatenbank erstellen.
Jedem Bild möchte ich dabei ein oder mehrere Attribute zuweisen.
Mit Hilfe dieser Attribute möchte ich dann eine Auswahl von Bildern treffen können.
z.B.: Alle Bilder der Kinder im Winter 2003.

Bild_1 Attribut_A -> (z.B.: 2003)
Bild_1 Attribut_B -> (z.B.: Winter)
Bild_1 Attribut_C -> (z.B.: Kinder)
Bild_2 Attribut_B
Bild_2 Attribut_C
Bild_3 Attribut_B

Nun zu meiner Frage. Kann ich die gewünschten Daten mit einem SELECT ermitteln?

Beispiel:
Ich mochte alle Bilder die das Attribut _B und _C haben.

gewünschtes Ergebnis:
Bild_1, Bild_2.
Nicht jedoch Bild_3, da es nur eines der gesuchten Attribute besitzt.

Danke

magpie
19-04-2003, 10:30
Leg eine Tabelle an mit folgenden Spalten:

Tabellenname: bilder
bild_name
datum
wann
wer

Jetzt kannst du nach den gewünschten Sachen suchen.

Bsp.

SELECT bild_name FROM bilder WHERE wann LIKE 'winter' AND wer LIKE 'kinder'

Such auch noch im Forum, da findest sicher noch mehr Lösungsansätze.


magpie

Patrick
19-04-2003, 10:42
@magpie

Das würde in diesem Fall funktionieren.

Ich möchte die Datenbank jedoch möglichst Variabel halten.

Bsp.:

Es gibt Fotos da sind beide Kinder drauf, dann gibt es Fotos auf denen nur eins drauf ist, oder ganz andere Personen.

Vielleicht fahre ich dieses Jahr zum Euro Disney, dann haben ich Fotos dich auch dafür ein Attribut bekommen sollen.

Jedes Foto könnte andere Attribute und auch eine andere Anzahl an Attributen haben.

So habe ich maximale Flexibilität.

Das ist es was icht möchte.

magpie
19-04-2003, 10:56
Um eine gewisse fixe Strukturierung wirst du nicht kommen. Wie du gesehen hast habe ich LIKE verwendet bei der Abfrage. Mit LIKE kannst du nach einem Bestimmten Zeichenmuster suchen.

Bsp.
Du hast eine Spalte in der Kommentare stehen. Keiner von diesen ist gleich aber alle haben "Schlüsselwörter". Also z.B. Ferien. Nun Möchtest du alle Datensätze ausgeben die dieses Wort enhalten.

SELECT * FROM table WHERE spalte LIKE '%Ferien%'
Die %-Zeichen bei LIKE sind Platzhalter.

Du muss nur immer darauf achten dass du immer Gleiche Wörter für die Atributte findest.

Schau auch mal hier http://www.mysql.de/doc/de/index.html
nach möglichkeiten.

magpie

Patrick
19-04-2003, 11:19
@magpie

Über diese Lösung habe ich zuerst auch nachgedacht.
Sie hat jedoch zwei entschiedenen Nachteile.

1. Datenredundanz: Alle Attribut Strings tauchen wieder unf wieder in voller Länge auf. Hoher Speicherbedarf.

2. Nicht flexibel bei Änderungen. Willman ein Attributnamen ändern müssen alle Datensätze durchsucht und ggf. geändert werden.

Das eine Strukturierung nötig ist, ist kar.
Sie soll wie folgt aussehen:

Die 1. Tabelle enthält zu jedem Bild eine ID(Primärschlüssel), den Dateinamen, und den Speicherort.

Die 2. Tabelle enthält zu jedem Vorhanden Attribut eine ID(Primärschlüssel), und den Attributnamen.

Die 3.Tabelle enthält in jedem Datensatz die ID des Bildes und eins der zugewiesenen Attribute. Besitz ein Bild also 3 Attribute sind zu diesem Bild drei Datensätze in dieser Tabelle enthalten.(Sie verbindet also Tab1 und Tab2)

magpie
19-04-2003, 11:41
1. Datenredundanz: Alle Attribut Strings tauchen wieder unf wieder in voller Länge auf. Hoher Speicherbedarf.

2. Nicht flexibel bei Änderungen. Willman ein Attributnamen ändern müssen alle Datensätze durchsucht und ggf. geändert werden.
Da hast du recht.

Die ersten beiden Tabellen sind klar. Wieso aber die dritte? Wie wärs wenn du in der Atributtentabelle eine bestimmte anzahl Spalten machst. Du füllst einfach nur die , die du brauchst. Die Tabelle wird zwar grösser und du verbrauchst unnütz Recurcen aber ne andere Möglichkeit seh ich nicht.


magpie