Hallo Leute,
Also ich habe dummerweise einen kleinen auftrag übernommen, ein bereits
begonnenes Projekt weiter zu entwickeln.
Der Auftraggeber möchte eine Art DMS für den Hausgebrauch erstellt haben.
Dabei soll zu jedem eingescannten Dokument die Möglichkeit bestehen, bis zu 16
Stichworte und zusätzlich ein Infotext zu speichern.
Mir scheint, der bisherige Entwickler hat vonSQL gar keine Ahnung.
Es gibt eine Datenbank mit zwei Tabellen, die folgende Struktur aufweisen:
Tabelle 1:
ID: fortlaufende Nummerierung, Autoinkrement
Datum: VChar, 15-Stellig, UTF-8
Datei: Char, 250-Stellig, UTF-8
Blatt: INT, 5-stellig, UTF-8
info: Schar: 4096-stellig, UTF-8
Tabelle 2:
Begriff: Schar, 128-stellig, UTF-8
page: INT, 5-Stellig, UTF-8
Erstmal ist mir aufgefallen, dass nirgendwo ein Index gesetzt wurde. :-(
In den Tabellenzellen tabelle1.blatt und
tabelle2.page steht der selbe Wert,
so dass ich hier eine mögliche Verknüpfung der beiden Tabellen versuchen
würde.
In der bereits von meinem Vorgänger erstellten Suchmaske kann wie folgt
gesucht werden:
1. Suche nach Stichwort
Bei dieser Suche wird in der Tabelle 2 nach dem entsprechenden Begriff
gesucht
2. Suche nach Teilen des Infotextes
Bei dieser Suche wird via LIKE oder NOT LIKE in der Tabelle 1 im Feld Info
gesucht.
Beide Suchvarianten sind mit UND oder ODER verknüpfbar.
Suche ich nun im Feld Stichwort nach einem Begriff, werden mir alle
Suchergebnisse ausgegeben, die in der Tabelle 2 enthalten sind.
Suche ich einen Teil im Infotext, werden mir aus der Tabelle 1 alle
entsprechenden Suchergebnisse ausgegeben.
Gebe ich nun sowohl in Feld Stichwort einen Begriff ein als auch imm Suchfeld
Infotext, erhalte ich Suchergebnisse doppelt.
Das liegt daran, dass im Quelltext zuerst mittels SQL die Abfrage
SELECT begriff, page FROM tabelle2 WHERE begriff='Suchbegriff' ausgeführt und
tabellarisch ausgegeben wird,
und danach erst mit einer weiteren SQL-Abfrage der Befehl
SELECT * FROM tabelle1 WHERE info LIKE 'infotext'
ausgeführt und tabellarisch ausgegeben wird.
Nun bin ich mir aber verdammt sicher, dass beide SQL-Befehle zusammengefasst
werden können, um unnötige Datenbankzugriffe zu vermeiden.
Also ungefähr so:
SELECT begriff, page FROM Tabelle2 WHERE begriff='Suchbegriff' AND IN tabelle1
infoLIKE 'infotext'
Irgendwie komme ich hier aber nicht auf den richtigen Weg. Mir war aus meiner
Erinnerung heraus so, dass wohl JOIN eine Hilfe sein kann. Aber wie?
Der SQL-Befehl
SELECT tabelle1.datei, tabelle1.datum, tabelle2.begriff,
tabelle2.page FROM
tabelle1, tabelle2 WHERE begriff = 'Rechnung'
gibt mir bei einem derzeitigen Datenbestand von 50 Datensätzen 275
Suchergebnisse aus.
Ich stand mit JOIN schon immer auf dem Kriegsfuß. ;-)
Gruß
Heiko