Sorry habe das Datenbanksystem vergessen: MySQL!
Hallo,
ich bin dabei ein Frontend für ein bestehendes Bibliothekssystem zu entwickeln.
Mein Problem betrifft 3 Tabellen, die alle über eine id miteinander verknüpft sind.
1. Tabelle "bestand"
bibid
autor
titel
... weitere Felder
2. Tabelle "status"
id
bibid
ausleihstatus (da oder nicht da)
ausleihtermin
rückgabetermin
3. Tabelle "optional"
oid
bibid
key_option_data
text_option_data
In der ersten Tabelle werden die bei der Katalogisierung erforderlichen
Pflichtfelder erfasst.
Die zweite Tabelle speichert alle statusrelevanten Daten.
In der dritten Tabelle wurden bei der Katalogiserung optionale Angaben
gespeichert. Beispielsweise Daten wie Erscheinungsjahr, Schlagwörter oder ob ein Bild
zur Ansicht zur Verfügung steht.
"Problem" hierbei, dass diesen Daten bei Katalogisierung ein sog. "key"
vergeben wurde, der in der Spalte key_option_data abgelegt wurde.
Im Feld text_option_data wird dann der reine Text abgespeichert.
Also ist ein Bild vorhanden steht im Feld key_option_data ein x und im Feld
text_option_data der Dateiname bild.jpg.
Wurde für das gleiche Buch auch ein Schlagwort vergeben, wurde der Schlüssel
y vergeben und im Feld text_option_data dann "programmierung".
Ich möchte nun erreichen, dass der Benutzer nach Suche über ein Formular Titel, Autor,
Ausleihstatus, aber auch angezeigt bekommt, ob ein Bild vorhanden ist, wenn ja, soll das Bild
angezeigt werden, wenn nein, entsprechende Ausgabe.
Leider bekomme ich es nicht hin, dass bei der SELECT-Abfrage, jene Datensätze
aus der Tabelle "optional" übersprungen werden, in denen der key_option_data nicht
mit dem Schlüssel für Buch versehen ist.
Letzter Versuch war:
$query = mysql_query("SELECT bestand.titel, "
. "bestand.autor, "
. "status.ausleihstatus, "
. "optional.text_option_data "
. "FROM biblio "
. "LEFT JOIN status "
. "ON bestand.bibid = status.bibid "
. "LEFT JOIN optional "
. "ON bestand.bibid = optional.bibid "
. "WHERE ((titel LIKE "
. "'%".$_REQUEST['title']."%') AND "
. "(key_option_data = x)) OR "
. "((titel LIKE "
. "'%".$_REQUEST['title']."%') OR "
. "(autor LIKE "
. "'%".$_REQUEST['title']."%'))");
Problem ist, dass ich dann natürlich doppelte Ausgaben bekomme,
verwende ich aber nur AND, erhalte ich nur die Daten,
die ein Bild haben.
Wie kann ich es erreichen, dass quasi Datensätze aus
optional übersprungen werden, die im Feld key_option_da nicht den
Schlüssel für Buch haben?
Ich wäre für Hilfe wirklich sehr dankbar!
Liebe Grüße
Jackie
Hallo,
ich bin dabei ein Frontend für ein bestehendes Bibliothekssystem zu entwickeln.
Mein Problem betrifft 3 Tabellen, die alle über eine id miteinander verknüpft sind.
1. Tabelle "bestand"
bibid
autor
titel
... weitere Felder
2. Tabelle "status"
id
bibid
ausleihstatus (da oder nicht da)
ausleihtermin
rückgabetermin
3. Tabelle "optional"
oid
bibid
key_option_data
text_option_data
In der ersten Tabelle werden die bei der Katalogisierung erforderlichen
Pflichtfelder erfasst.
Die zweite Tabelle speichert alle statusrelevanten Daten.
In der dritten Tabelle wurden bei der Katalogiserung optionale Angaben
gespeichert. Beispielsweise Daten wie Erscheinungsjahr, Schlagwörter oder ob ein Bild
zur Ansicht zur Verfügung steht.
"Problem" hierbei, dass diesen Daten bei Katalogisierung ein sog. "key"
vergeben wurde, der in der Spalte key_option_data abgelegt wurde.
Im Feld text_option_data wird dann der reine Text abgespeichert.
Also ist ein Bild vorhanden steht im Feld key_option_data ein x und im Feld
text_option_data der Dateiname bild.jpg.
Wurde für das gleiche Buch auch ein Schlagwort vergeben, wurde der Schlüssel
y vergeben und im Feld text_option_data dann "programmierung".
Ich möchte nun erreichen, dass der Benutzer nach Suche über ein Formular Titel, Autor,
Ausleihstatus, aber auch angezeigt bekommt, ob ein Bild vorhanden ist, wenn ja, soll das Bild
angezeigt werden, wenn nein, entsprechende Ausgabe.
Leider bekomme ich es nicht hin, dass bei der SELECT-Abfrage, jene Datensätze
aus der Tabelle "optional" übersprungen werden, in denen der key_option_data nicht
mit dem Schlüssel für Buch versehen ist.
Letzter Versuch war:
$query = mysql_query("SELECT bestand.titel, "
. "bestand.autor, "
. "status.ausleihstatus, "
. "optional.text_option_data "
. "FROM biblio "
. "LEFT JOIN status "
. "ON bestand.bibid = status.bibid "
. "LEFT JOIN optional "
. "ON bestand.bibid = optional.bibid "
. "WHERE ((titel LIKE "
. "'%".$_REQUEST['title']."%') AND "
. "(key_option_data = x)) OR "
. "((titel LIKE "
. "'%".$_REQUEST['title']."%') OR "
. "(autor LIKE "
. "'%".$_REQUEST['title']."%'))");
Problem ist, dass ich dann natürlich doppelte Ausgaben bekomme,
verwende ich aber nur AND, erhalte ich nur die Daten,
die ein Bild haben.
Wie kann ich es erreichen, dass quasi Datensätze aus
optional übersprungen werden, die im Feld key_option_da nicht den
Schlüssel für Buch haben?
Ich wäre für Hilfe wirklich sehr dankbar!
Liebe Grüße
Jackie
Zuletzt bearbeitet: