Datenbank nach variablen durchsuchen

Alt 06.09.2011, 10:33   # 1
darkii
 
Registriert seit: 16.05.2011
Beiträge: 39
Hei ich bins wieder liebe Netzweltgemeinde,

aber ohne mich habr ihr ja nichts zutuhen

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
  Mit Zitat antworten
Alt 06.09.2011, 10:51   # 2
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
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?
  Mit Zitat antworten
Alt 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
.
  Mit Zitat antworten
Alt 06.09.2011, 11:30   # 4
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
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
  Mit Zitat antworten
Alt 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 !
  Mit Zitat antworten
Alt 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 ^^
  Mit Zitat antworten
Alt 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
  Mit Zitat antworten
Alt 06.09.2011, 14:33   # 8
darkii
Threadstarter
 
Registriert seit: 16.05.2011
Beiträge: 39
PHP-Code:
<?php
include("db-verbindung.php");
?>

<!DOCTYPE HTML>
<html>
 <head>
  <title> Test </title>
 </head> 
<body>
<form action="index2.php" method="post">
<input type="text" size="17" name="Inhalt">
<br>

</form>
<br>
<br>
<?php
$var1 
$_POST["Inhalt"];

include(
"db-verbindung.php");



$wort1 mysql_query("SELECT * FROM test WHERE wörter LIKE '%$var1%'");


while(
$row mysql_fetch_object($wort1))
{
  echo 
$row->Wörter;
}
      
?>
</form>
</body>
</html>



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 ?
  Mit Zitat antworten
Alt 06.09.2011, 14:53   # 9
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
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.
  Mit Zitat antworten
Alt 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 -.-
  Mit Zitat antworten
Alt 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
  Mit Zitat antworten
Alt 06.09.2011, 18:46   # 12
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
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
  Mit Zitat antworten
Alt 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)
  Mit Zitat antworten
Alt 06.09.2011, 20:33   # 14
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
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.
  Mit Zitat antworten
Alt 06.09.2011, 21:06   # 15
grunzer
Hausmeister im Virtuellen
 
Benutzerbild von grunzer
 
Registriert seit: 28.12.2006
Beiträge: 2.953
Vielleicht helfen Dir diese beiden Links weiter:
PHP: PCRE - Manual
MySQL :: MySQL 5.1 Referenzhandbuch :: G Beschreibung der MySQL-Syntax für reguläre Ausdrücke

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 !
  Mit Zitat antworten
Alt 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
  Mit Zitat antworten
Alt 07.09.2011, 12:35   # 17
darkii
Threadstarter
 
Registriert seit: 16.05.2011
Beiträge: 39
PHP-Code:
<?php
include("db-verbindung.php");
?>

<!DOCTYPE HTML>
<html>
 <head>
  <title> Test </title>
 </head> 
<body>
<form action="index2.php" method="POST" button="ok">
<input type="text" size="17" name="Inhalt">
<input type="text" size="17" name="Inhalt1">
<input type="text" size="17" name="Inhalt2">
<input type="text" size="17" name="Inhalt3">
<INPUT TYPE=SUBMIT VALUE="Abschicken">
<br>

</form>
<br>
<br>
<?php

$var1 
$_POST["Inhalt"];
$var2 $_POST["Inhalt1"];
$var3 $_POST["Inhalt2"];
$var4 $_POST["Inhalt3"];


include(
"db-verbindung.php");
$sql = ("SELECT wort FROM test");
$variable mysql_query($sql) or die("Anfrage nicht erfolgreich");
$anzahl mysql_num_rows($variable);

echo 
"Anzahl der Datensätze: $anzahl";

$adr mysql_fetch_array($variable);

 
$string implode(','$adr);
 echo 
$string;
 
 
$treffer preg_match("!(($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4))!"$string);
 
print_r ($treffer);

 


?>

</body>
</html>
so siehts aus aber irgendwas passt da noch nicht
  Mit Zitat antworten
Alt 07.09.2011, 13:16   # 18
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
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:

'/^($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4 )($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4 )$/'

/ statt !, mit ^$ noch Anfang und Ende markiert.
  Mit Zitat antworten
Alt 07.09.2011, 14:44   # 19
darkii
Threadstarter
 
Registriert seit: 16.05.2011
Beiträge: 39
ist ! nicht das gleiche wie / ??? und es funktioniert immernoch nicht
PHP-Code:
 <?php
include("db-verbindung.php");
?>

<!DOCTYPE HTML>
<html>
 <head>
  <title> Test </title>
 </head> 
<body>
<form action="index2.php" method="POST" button="ok">
<input type="text" size="17" name="Inhalt">
<input type="text" size="17" name="Inhalt1">
<input type="text" size="17" name="Inhalt2">
<input type="text" size="17" name="Inhalt3">
<INPUT TYPE=SUBMIT VALUE="Abschicken">
<br>

</form>
<br>
<br>
<?php

$var1 
$_POST["Inhalt"];
$var2 $_POST["Inhalt1"];
$var3 $_POST["Inhalt2"];
$var4 $_POST["Inhalt3"];


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");


echo 
"Anzahl der Datensätze:".$anzahl."<br>";

$bla = array();
while(
$adr mysql_fetch_assoc($variable)){
    
$bla[] = $adr['wort'];
}
    echo 
"<br>".var_dump($bla)."<br>";
    
 
$string implode(','$bla);
 echo 
$string;
 
 
$treffer preg_match('/^($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4 )($var1|$var2|$var3|$var4)($var1|$var2|$var3|$var4 )$/' $string);
 
print_r ($treffer);

 


?>

</body>
</html>

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
  Mit Zitat antworten
Alt 07.09.2011, 15:19   # 20
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
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.

Sorry,
Thorsten
__________________
Wieder da: FreewareGuide.de
...bin letztens durch die Aufnahmeprüfung zur Hellseherschule gekracht! smiley crystal ball
  Mit Zitat antworten

Alt 28.05.2012, 21:09 # --
News Flash
 
Benutzerbild von News Flash
 
 
 

Das könnte Dich auch noch interessieren:

Nicht fündig geworden? Dann ohne Anmeldung in unserem Gast-Forum nachfragen.

   
Antwort
Themen-Optionen



Alle Zeitangaben in WEZ +2. Es ist jetzt 21:09 Uhr.