Dynamische Suche in Tabellen einer SQL Datenbank
Tobias Weisserth
- datenbank
Hallo liebe Helferlein,
meine nächste neugierige Frage:
Angenommen in einer Oracle Datenbank existiert eine Tabelle mit Einträgen. Ich möchte nun ein Web-formular anbieten, mit dem nach einzelnen oder einer Gruppe von Schlüsselwörtern in allen Einträgen der Datenbank gesucht werden kann.
Dabei soll es auch möglich sein, nur einzelne Felder für jeden Datensatz zu durchsuchen.
Frage: Wenn ich das ganze in Perl bewerkstelligen möchte, was brauche ich dazu? (Abgesehen von einem CGI Server mit Perlinterpreter und der vorhandenen Datenbank)
Frage: Hat jemand von Euch eventuell Beispielprogramme aus denen ich lernen kann?
Ich freue mich wie immer auf Eure Antworten! ;-)
Gruß,
Tobias
Hallo,
Frage: Wenn ich das ganze in Perl bewerkstelligen möchte, was brauche ich dazu? (Abgesehen von einem CGI Server mit Perlinterpreter und der vorhandenen Datenbank)
Die beiden Module DBI und DBD::Oracle. Dann wäre da noch ein brauchbarer Editor sinnvoll. Dann noch etwas Kenntnisse im Bereich Perl, HTML und SQL. Dann stehen dir alle Wege offen, das ultimative Suchscript zu schreiben.
Frage: Hat jemand von Euch eventuell Beispielprogramme aus denen ich lernen kann?
Die Dokumentationen zu obigen Moduln enthalten einige Beispiele, wie die Datenbankabfagen gelöst werden können. HTML drum herum ist dann einfach.
Sieh Dir auch mal http://www.oracletool.com an. Das ist ein Administrationswerkzeug für Oracle, welches in Perl geschrieben ist. Neben mehr oder weniger übichen Datenbankabfragen kannst Du hier auch viel über das Abfragen der Oracleinternas lernen.
Grüße
Klaus
Danke für die Antwort,
so in etwa hatte ich mir das auch vorgestellt. Ich habe mir gestern "Programmieren mit Perl DBI" aus der Bib geholt. Ich denke, das Buch deckt fast alles ab, was ich brauche.
Dann bleibt allerdings noch der Suchalgorithmus. Gibt es da einen etablierten, der sich durchgesetzt hat und verfügbar ist? Ich will das Rad nicht neu erfinden ;-)
Ansonsten sehe ich die Sache sehr optimistisch.
Nebenbei: Weis einer von Euch vielleicht, was es mit Oracle Schemata zu tun hat, in denen Tabellen abgelegt sind? Für jedes Schema muss man sich selbstständig anmelden, dann hat man SQL Zugriff auf genau die Tabellen, die im Schema abgespeichert sind. Sind Schemata so etwas wie unabhängige Datenbanken, die von einem einzigen Oracle Server verwaltet werden? Gibt es eventuell Zusammenhänge mit SQL, von denen ich in Bezug auf Schemata wissen sollte?
Grüße,
Tobias W.
Hallo,
Frage: Wenn ich das ganze in Perl bewerkstelligen möchte, was brauche ich dazu? (Abgesehen von einem CGI Server mit Perlinterpreter und der vorhandenen Datenbank)
Die beiden Module DBI und DBD::Oracle. Dann wäre da noch ein brauchbarer Editor sinnvoll. Dann noch etwas Kenntnisse im Bereich Perl, HTML und SQL. Dann stehen dir alle Wege offen, das ultimative Suchscript zu schreiben.
Frage: Hat jemand von Euch eventuell Beispielprogramme aus denen ich lernen kann?
Die Dokumentationen zu obigen Moduln enthalten einige Beispiele, wie die Datenbankabfagen gelöst werden können. HTML drum herum ist dann einfach.
Sieh Dir auch mal http://www.oracletool.com an. Das ist ein Administrationswerkzeug für Oracle, welches in Perl geschrieben ist. Neben mehr oder weniger übichen Datenbankabfragen kannst Du hier auch viel über das Abfragen der Oracleinternas lernen.
Grüße
Klaus
Hallo,
Dann bleibt allerdings noch der Suchalgorithmus. Gibt es da einen etablierten, der sich durchgesetzt hat und verfügbar ist? Ich will das Rad nicht neu erfinden ;-)
Für das ist an sich die Datenbank zuständig. SQL heißt nicht von ungefähr so (Structured Query Language).
Ein typisches select statement sieht etwas so aus:
SELECT name, vorname, adresse, telefonnummer
FROM personen
Das würde bestimmte Eigenschaften (Felder) _alle_ Datensätze auflisten, welche in der Tabelle personen gespeichert sind.
SELECT name, vorname, adresse, telefonnummer
FROM personen
WHERE alter >= 18
AND alter =<40
AND geschlecht = 'w'
Mit diesem Statement würden zwar auch die gleichen Eigenschaften wie oben aufgelistet werden, jedoch nur jener Personen, welche weiblich und zwischen 18 und 40 sind.
Voilá, und da hast Du schon eine Suchabfrage. Wie die Datenbank das jetzt genau erledigt, das kannst Du zwar nicht ohne weiteres feststellen, allerdings ist das (zumindest in der ersten Zeit) auch irrelevant. (Außer Du beschäftigst Dich gerade mit Datenbank- bzw. Statementtuning *g*)
Ansonsten sehe ich die Sache sehr optimistisch.
Nebenbei: Weis einer von Euch vielleicht, was es mit Oracle Schemata zu tun hat, in denen Tabellen abgelegt sind? Für jedes Schema muss man sich selbstständig anmelden, dann hat man SQL Zugriff auf genau die Tabellen, die im Schema abgespeichert sind. Sind Schemata so etwas wie unabhängige Datenbanken, die von einem einzigen Oracle Server verwaltet werden? Gibt es eventuell Zusammenhänge mit SQL, von denen ich in Bezug auf Schemata wissen sollte?
So im Groben besitzt jede Tabelle (bzw. jedes Objekt) einen Besitzer. Diesem Besitzer ist ein Schema zugeordnet, in dem die DB-Objekte zu finden sind. Allerdings kann mittels entsprechender Rechtevergabe (Grants) verschiedenen Datenbank-Benutzern mehr oder weniger Zugriff auf Objekte in einem Fremden Schema gewährt werden. Da das Thema Oracle aber ein ziemlich komplexes ist, solltest Du am Besten nochmals in die Bibliothek und dort auch ein passendes Buch über Oracle ausleihen;-)
Und wenn Du schon da bist, nimm auch noch eins über SQL-Grundlagen mit, sofern das Oraclebuch hier nicht sowieso erschöpfende Antworten liefert.
Grüße
Klaus
Nochmals Danke für die Hilfe,
Das mit dem Suchen ist allerdinsg etwas missverständlich gewesen. Ich meinte damit eigentlich nicht das Einsetzen geschickter SQL Statements.
Folgendes Problem:
In einer Tabelle sind einfache Datensätze mit verschiedenen Feldern gespeichert.
Beispiel Datensatz:
Feld1 => Wert1
Feld2 => Wert2
usw.
Eine Webseite mit einem Formular soll die Möglichkeit bieten, alle Datensätze dieser Tabelle nach einem Userinput zu durchsuchen. Es sollen die Datensätze ausgegeben werden, in denen der Input mindestens einmal vorgekommen ist. Ausserdem soll spezifiert werden können, in welchen Feldern der Datensätze gesucht werden soll.
Diese Suche lässt sich offensichtlich nicht mit SQL alleine lösen. Ich dachte daran Perl und das DBI Modul zu verwenden. So kann ich Perl den Input und Output managen lassen und benutze DBI, um mittels SQL dann alle Datensätze nach dem Input zu durchsuchen und später als HTML wieder auszugeben.
Meine ursprüngliche Frage war, ob es für dieses Problem schon verfügbare Lösungen gibt.
Gruß,
Tobias
Hallo,
Dann bleibt allerdings noch der Suchalgorithmus. Gibt es da einen etablierten, der sich durchgesetzt hat und verfügbar ist? Ich will das Rad nicht neu erfinden ;-)
Für das ist an sich die Datenbank zuständig. SQL heißt nicht von ungefähr so (Structured Query Language).
Ein typisches select statement sieht etwas so aus:
SELECT name, vorname, adresse, telefonnummer
FROM personen
Das würde bestimmte Eigenschaften (Felder) _alle_ Datensätze auflisten, welche in der Tabelle personen gespeichert sind.
SELECT name, vorname, adresse, telefonnummer
FROM personen
WHERE alter >= 18
AND alter =<40
AND geschlecht = 'w'
Mit diesem Statement würden zwar auch die gleichen Eigenschaften wie oben aufgelistet werden, jedoch nur jener Personen, welche weiblich und zwischen 18 und 40 sind.
Voilá, und da hast Du schon eine Suchabfrage. Wie die Datenbank das jetzt genau erledigt, das kannst Du zwar nicht ohne weiteres feststellen, allerdings ist das (zumindest in der ersten Zeit) auch irrelevant. (Außer Du beschäftigst Dich gerade mit Datenbank- bzw. Statementtuning *g*)
Ansonsten sehe ich die Sache sehr optimistisch.
Nebenbei: Weis einer von Euch vielleicht, was es mit Oracle Schemata zu tun hat, in denen Tabellen abgelegt sind? Für jedes Schema muss man sich selbstständig anmelden, dann hat man SQL Zugriff auf genau die Tabellen, die im Schema abgespeichert sind. Sind Schemata so etwas wie unabhängige Datenbanken, die von einem einzigen Oracle Server verwaltet werden? Gibt es eventuell Zusammenhänge mit SQL, von denen ich in Bezug auf Schemata wissen sollte?
So im Groben besitzt jede Tabelle (bzw. jedes Objekt) einen Besitzer. Diesem Besitzer ist ein Schema zugeordnet, in dem die DB-Objekte zu finden sind. Allerdings kann mittels entsprechender Rechtevergabe (Grants) verschiedenen Datenbank-Benutzern mehr oder weniger Zugriff auf Objekte in einem Fremden Schema gewährt werden. Da das Thema Oracle aber ein ziemlich komplexes ist, solltest Du am Besten nochmals in die Bibliothek und dort auch ein passendes Buch über Oracle ausleihen;-)
Und wenn Du schon da bist, nimm auch noch eins über SQL-Grundlagen mit, sofern das Oraclebuch hier nicht sowieso erschöpfende Antworten liefert.
Grüße
Klaus
Hallo,
Das mit dem Suchen ist allerdinsg etwas missverständlich gewesen. Ich meinte damit eigentlich nicht das Einsetzen geschickter SQL Statements.
Aber im Prinzip läufts doch immer darauf hinaus, geschickt SQL-Statements einzusetzen.
Diese Suche lässt sich offensichtlich nicht mit SQL alleine lösen. Ich dachte daran Perl und das DBI Modul zu verwenden. So kann ich Perl den Input und Output managen lassen und benutze DBI, um mittels SQL dann alle Datensätze nach dem Input zu durchsuchen und später als HTML wieder auszugeben.
Ja, und aus den Benutzeingaben wird dann möglichst geschickt ein SQL-Statement gebastelt.
Meine ursprüngliche Frage war, ob es für dieses Problem schon verfügbare Lösungen gibt.
Du solltest Dir mal die DBIx-Module ansehen (http://search.cpan.org/search?mode=module&query=DBIx).
Ich habe zwar wenig bis keine Erfahrungen damit, aber da habe ich gerade DBIx::SearchBuilder, DBIx::HTMLViewer, DBIx::FullTextSearch gesehen, die Dir eventuell weiterhelfen bzw. Anregungen geben können.
Und wenn das nichts bringt, so schwierig ist das dann auch wieder nicht, einen halbwegs intelligenten SQL-Generator zu schreiben. Ich hab vor kurzem ein XML-Dateninterface für Delphi gebastelt, welches per HTTP und XML-Request Daten von einem Server abholt, und zu Testzwecken habe ich diesen XML-Request in eine SQL-Abfrage umgemodelt, um die Testdaten aus einer Datenbank zu holen. Das war keine Stunde Arbeit, und macht genau das, was ich will.
Grüße
Klaus