Also ich hab ein Problem und den Lösungsweg schon fast erkannt weis nur nicht wonach ich suchen muss
Also es sieht so aus ich will ein Programm schreiben das bei eingabe von Buchstaben zb. a,s,h,u aus der Datenbank ein Wort sucht das die Variablen enthällt. Nur ich weis nicht wie ich es schaffe das er eben nach den wörtern sucht die genau nur die variblen erhalten.. in welche richtung muss ich mich da informieren ? Will nicht umbedingt eine Lösung nur eine Richtung
06.09.2011, 10:51
#
2
FreewareGuide
Moderator
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
Er soll (nach Deinem Beispiel) "haus" finden, aber nicht "maus" oder "hausbau"?
Was heißt Datenbank, sind darin Texte und die Texte müssen nach Worten durchsucht werden, oder enthält die Datenbank bereits nur Worte?
Was für ein Programm? Reicht eine Programmoberfläche zum Zugriff auf eine MySQL-Datenbank und irgendwo vermerkter SQL-Query? Soll es ein eigenes Desktop-Programm werden? Soll es eine Webseite werden?
06.09.2011, 11:09
#
3
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
Php website, und genau er soll ein wort finden das genau die variablen enthält und keine anderen. Und das aussehen bekomm ich einfach mit nem html <form> hin . Es sind nur Wörter aber mit unterschiedlichen längen
.
06.09.2011, 11:30
#
4
FreewareGuide
Moderator
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
Also SQL-Anfrage in einer PHP-Seite, im SQL-Query sinnvollerweise einen regulären Ausdrück. Damit ist die Richtung klar
06.09.2011, 12:11
#
5
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
Vielen Dank habs bisslang mit ner like anweisung probiert kamm aber nicht auf die richtige where anweisung werde mir mal den Text zugenüge führen danke !
06.09.2011, 12:49
#
6
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
Es wird schon mein problem ist es noch das die buchstaben durcheinander eingegeben werden ^^
06.09.2011, 13:41
#
7
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
auch hinbekommen Nur jetzt muss ich schleife einbauen oder so ^^ sonst suchts nach jedem buchstaben wieder neu
so sieht der code atm aus. Das Problem ist nun wenn ich den erste nBuchstabe eintippe also nehmen wir mal an in der Datenbank stehen Hund Haus Katze und ich tippe h ein bekomm ich ja Hund und Haus raus tipp ich nun aber noch a ein bekomm ich Katze und Haus ... Idee wie ich das behebe ? wie ich die schleife da aufbauen muss ?
06.09.2011, 14:53
#
9
FreewareGuide
Moderator
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
Du hast nicht ernsthaft Namen wie "wörter" verwendet in der Tabelle, oder? Sowas würde ich lassen, keine Umlaute, alles hübsch einfach ASCII. Sonst funktioniert es hier und dort plötzlich nicht mehr.
Also, ich hatte oben noch eine weitere Richtung genannt, nämlich reguläre Ausdrücke. Die solltest Du Dir mal angucken.
06.09.2011, 15:55
#
10
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
ok werd ich machen mein weg ist zu hart
---------- Doppelpost zusammengeführt ----------
ok das scheint mir komplex zu sein -.- is das schwer -.-
06.09.2011, 16:41
#
11
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
Hab das internet durchstöber und 2 Tutorials gelesen aber bei keinem davon gieng es in die Richtung eher wenn man end oder Anfangsbuchstaben weis
06.09.2011, 18:46
#
12
FreewareGuide
Moderator
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
Ich muss zugeben, RegExp in SQL-Anfragen hab ich auch schon lange nicht mehr benutzt, ist auch wegen Geschwindigkeit wohl nicht so optimal für große Datenmengen, aber ein regulärer Ausdruck für Deinen Wunsch wäre ungefähr so:
[haus]{1,}
Wobei mir verschiedenes noch nicht klar ist, hab ich schon gefragt, z.B. ob die Datenbankeinträge nur die jeweiligen Wörter sind. Wenn ein entsprechendes Wort in einem größeren Text gesucht werden soll, wird es natürlich komplizierter. Auch ist mir nicht klar, ob die Wörter alle fraglichen Zeichen enthalten müssen (heißt "haus" gilt, "aus" nicht)? Obiger Ausdruck findest auch "aus". Er funktioniert so: In den eckigen Klammern sind die Zeichen, die vorkommen dürfen, in den geschweiften Klammern dahinter wieviel mindestens (1) und höchstens (egal). Für diesen speziellen Fall (mindestens eins) geht auch ein Plus:
[haus]+
Hier z.B. eine Seite, wo Du reguläre Ausdrücke testen kannst: RegexPlanet Testing
Grüße,
Thorsten
06.09.2011, 19:36
#
13
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
Erstmal danke für die ganze mühe ich versuch das ganze mal etwas besser zu schildern
Das Programm bei einer Eingabe von Buchstaben mögliche Kombinations aus einer Wortliste suchen (Ich bau auch noch ein das man wörter in die Liste eintragen kann, aber das ist ja pippi fax) Ob das jetzt wie in dem Speziellenfall Haus auch aus rausgiebt ist eig egal wäre nur ein Zusatz zusätzlich soll das ganze nicht an eine Anzahl von Buchstaben gebunden sein zb. soll man auch atuhoaues eingeben können und er spuckt dann eben Autohaus aus. Meine Frage wäre daher jetzt wäre es möglich das ganze mit variablen zu definieren ? Sprich in der geschweiften Klammer würde $var1-$var16 stehen ?
Ps: In der Datenbank sind nur Wörter und wie schnell das ganze geht ist erstmal egal da es nur für mich zum lernen ist da ich grad in der Ausbildung bin (weshalb ich auch keine Lösung will nur Weg hilfen)
06.09.2011, 20:33
#
14
FreewareGuide
Moderator
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
Ich verstehe nicht, was Du mit den geschweiften Klammern und "Variablen" möchtest. So wie ich das sehe sind die möglichen Buchstaben ("atuhoaues") die Eingabe, die müssen also in den eckigen Klammern stehen. Geschweifte Klammern bzw. "+" können eigentlich stehen bleiben (= "nicht an eine Anzahl von Buchstaben gebunden").
Falls Du mit "Variable" meinst, dass du die Eingabe aus dem Formular in die SQL-Anfrage einbauen kannst, dann natürlich, die SQL-Anfrage ist eine Textfolge, ein "String", den Du beliebig zusammen bauen kannst, bevor Du ihn als Query angibst. Allerdings solltest du die Eingaben unbedingt auf Plausibilität überprüfen, bevor Du sie auf die Datenbank loslässt, sonst machst du Dir Sicherheitslöcher auf.
Der erste zeigt eine Möglichkeit wie man sich reguläre Ausdrücke einfach erzeugen lassen kann um sie dann direkt in das SQL-Statement einzufügen.
Der zweite zeigt Dir wie Du die Ausdrücke in das SQL-Statement einfügen kannst.
Ich glaube Du denkst zu kompliziert
Grüße Grunzer
__________________
Lieber eine unsichere Freiheit
als eine sichere Diktatur !
06.09.2011, 21:14
#
16
darkii
Threadstarter
Registriert seit: 16.05.2011
Beiträge: 39
Glaub ich auch meinte zumindest mein Chef Und Freewar ich muss ja die Wörter über ein Formular in diese Klammern reinbekommen sonst bringts doch nichts Ich werd morgen mir mal Grunzers seiten durchlesen wobei ich das zweite schon durchgelesen habe und da noch am Banhof stehe
Wie kommst Du zu dem Pattern? Warum Ausrufezeichen an Anfang und Ende? Neuerdings sollen es doch längere Bestandteile sein und nicht nur einzelne Buchstaben, oder warum machst Du es so kompliziert?
Ohne über die grundsätzliche Funktion nachzudenken, versuch es mal so:
include("db-verbindung.php");
$sql = ("SELECT wort FROM test");
$variable = mysql_query($sql) or die("Anfrage nicht erfolgreich");
$anzahl = mysql_num_rows($variable) or die ("Anzahl nicht definierbar");
und zusätzlich hab ich das problem das sollte es funktionieren ich 2 Probleme habe 1. was ist wenn das Wort mehr als 4 buchstaben hatt ? und 2. Wird es extrem langsam sobald ich die Datenbank mit mehr Wörtern fülle z.b den ganzen Duden
Deshalb such ich noch ne andere möglichkeit -.- Aber gut ich hab ja 2 Wochen
---------- Doppelpost zusammengeführt ----------
kann grad nicht editieren mach mal nen doppelpost Wegen dem mehrere Buchstaben auf einmal ja sollte eig aber das bekomm ich nicht hin
07.09.2011, 15:19
#
20
FreewareGuide
Moderator
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
Bitte gib Dir doch etwas mehr Mühe, Dein Problem zu beschreiben und ganze verständliche Sätze mit Satzzeichen, ohne Bandwurm zu schreiben
Ich hatte Dich gefragt, wie Du zu dem Pattern gekommen bist, ob Du auch längere Bestandteile ermöglichen willst? Aha, jetzt doch die Einsicht, dass Du Dich derart auf vier "Variablen" festlegst? Spät...
Also: Bitte erkläre zuerst verständlich und vollständig Dein Problem. Und die Randbedingungen (z.B. wie es gefüllt werden soll, Duden?). Du solltest zuerst einmal strukturiert Dein Problem erkennen bevor Du drauf los bastelst. Von Geschwindigkeitsproblemen habe ich oben auch schon mal gesprochen - aber was bringt es wenn ich Dir sinnvolle Rückfragen stelle, wenn Du sie sowieso nicht beantwortest und danach sowieso machst was Du willst? Wir werden das Problem nicht für Dich lösen können, Du wirst um ein Verständnis von Servern, von Programmiersprachen und weiterem nicht drum herum kommen.
Reguläre Ausdrücke sind langsam, wenn Du aber erst alles aus einer Datenbank holst um danach in PHP den regulären Ausdruck anzuwenden ist das mehr Aufwand (langsamer) als wenn Du die Datenbank direkt mit einem regulären Ausdruck anfragst. Wenn Du tatsächlich mit großen Datenmengen hantieren möchtest ("Duden"), dann solltest Du vielleicht viel tiefer in die Materie einsteigen und intelligentere Suchalgorithmen suchen. Keine Kenntnisse aber trotzdem gleich den großen Wurf wagen, das muss zwangsläufig schief gehen.
Zu allererst: Du solltest nur ein Eingabefeld vorsehen, in dass man die Menge an Buchstaben eintippen kann, die berücksichtigt werden sollen. Für jeden Buchstaben ein Feld ist überflüssig, fehlerträchtig und unfreundlich für den Benutzer.