PDA

Vollstndige Version anzeigen : MySQL Suchmaschine!


freecounter
20-04-2002, 20:26
Wie erstelle ich eine Suchmaschine, die MySQL Datenbank durchsuchen kann?

ingo
21-04-2002, 00:05
... wie komplex das ganze sein soll..

volltextsuche realisiert man am besten mit einem textinput-feld (form) und einem einzigen query, der dann die datenbank mit dem befehl "like" abfragt.

beispielsweise:

<form action="$PHP_SELF" method="post">
<input type="text" size="20" name="volltext">
<input type="submit" name="send" value="Suchen">
</form>

if($send) //wenn das formular abgesendet wurde

{

if(strlen($volltext) > 0) //wenn in das textfeld etwas eingegeben wurde

{

$ergebnis=mysql_query("SELECT feld FROM tabelle WHERE feld LIKE '%volltext%'") or die("Fehler");

$num=mysql_num_rows($ergebnis);

if($num != 0) //wen etwas gefunden wurde

{

echo "Suchergebnis:<p>";
while($row=mysql_fetch_array($ergebnis))

{

$feld=$row["feld"];

echo $feld;

}

}

else //wurde nichts gefunden

{

echo "Keine Suchergebnisse";

}

}

else //wurde nichts eingegeben

{

echo "Geben Sie einen Suchbegriff ein";

}

} //if send ende


ich hab das jetzt mal so hingeschustert. bernimm keine verantwortung dass das geht, aber theoretisch funktionierts so.

willst du eine komplexere suche realisieren, ist es empfehlenswert, sich durch die suchkriterien einen mysql query zusammenzustellen.

ich erklrs dir kurz theoretisch, es freut mich jetzt grad nicht das alles zu schreiben..

du machst es nach dem schema von oben.

nur schaut dein anfangsquery so in der art aus:

$suche_abfrage = ("SELECT feld FROM tabelle WHERE (";

dann berprfst du die eingabefelder nach der reihe ob etwas eingegeben wurde. wurde etwas eingegeben dann kommt eine suchbedingung dazu:

$suche_abfrage.= " feld LIKE '%volltext%' AND ";

nach jedem mal, wo du dem query eine bedingung hinzufgst, machst du folgendes (geht sicher auch anders, aber so mach ichs immer):

$len=strlen($suche_abfrage); //gibt die zeichenlnge des querys zurck
$vergleich=substr($suche_abfrage, ($len-4), -1); //du lsst dir vom letzten - 4 zeichen bis zum vorletzen zeichen das ergebnis zurckgeben. also das AND.

if ($vergleich == 'AND') //hngt am ende des querys ein AND dran

{

$suche_abfrage=substr($suche_abfrage,0,($len-4)); //du verkrzt den query um die letzten vier zeichen um zur nchsten bedingung gehen zu knnen wo du das ganze noch einmal machst.
$suche_abfrage.=") AND ("; //fr die nchste WHERE bedingung wird die klammer geschlossen und einen neue begonnen

}


bei der letzten bedingung prfst du das nochmal nur hngst einfach das ") AND (" nicht mehr an damit der query korrekt ist.

das ganze gibst du dann in der while schleife aus.

hoffe das war verstndlich

lg, ingo


}

freecounter
21-04-2002, 13:28
$ergebnis=mysql_query("SELECT feld FROM tabelle WHERE feld LIKE '%volltext%'") or die("Fehler");

tabelle: Was muss ich dort eingeben, weil ich hab schon alles versucht und er zeigt immer "Fehler".

ingo
21-04-2002, 15:14
zuerst musst du natrlich mal die verbindung zur datenbank herstellen.

mysql_query("SELECT feld1, feld2, feld3 FROM deinetabelle WHERE suchbedingung");

feld1, feld2, feld3 sind die felder (fields) deiner mysql-datenbank.
deinetabelle ist dein mysql-datenbank table wo felder mit inhalt drinnenstehen.
suchbedingung schrnkt die selection ein.

aber schau dir mal das an:
http://ffm.junetz.de/members/reeg/DSP/node9.html#SECTION04250000000000000000

http://www.php-guide.de/service/tutorials/doku/doku.php4#zehn

freecounter
22-04-2002, 23:21
das funktionier trotzdem nicht, also ich hab folgende felder:

cdid,
cdname,
cdtyp,
cdbesch,
cdliste

vielleich kannst du mir den Script schreiben, weil ich das nicht so ganz verstehe.

ingo
22-04-2002, 23:44
angenommen du hast nur 1 eingabefeld (text), und willst damit alle datenbankfelder durchsuchen machst du das wie folgt:

du hast den namen deiner tabelle nicht angegeben, deswegen kann ich hier nur einen fiktiven namen einsetzen..

<?php

echo "
<form method="post" action="$PHP_SELF">
<input type="text" size="20" name="volltext">
<input type="submit" name="send" value="Suchen">
</form>";

if($send)

{

/* Hier muss der DB Connect rein*/

$suche_ergebnis = mysql_query("SELECT * FROM deinetabelle WHERE (cdid LIKE '%volltext%') OR (cdname LIKE '%volltext%') OR (cdtyp LIKE '%volltext%') OR (cdbesch LIKE '%volltext%') OR (cdliste LIKE '%volltext%)") or die("Fehler bei der Datenbankabfrage");

echo "
<table cellspacing="2" cellpadding="0" border="0">
<tr>
<td>cdid</td>
<td>cdname</td>
<td>cdtyp</td>
<td>cdbesch</td>
<td>cdliste</td>
</tr>";

while($row=mysql_fetch_array($suche_ergebnis))

{

$cdid=$row["cdid"];
$cdname=$row["cdname"];
$cdtyp=$row["cdtyp"];
$cdbesch=$row["cdbesch"];
$cdliste=$row["cdliste"];

echo "
<tr>
<td>$cdid</td>
<td>$cdname</td>
<td>$cdtyp</td>
<td>$cdbesch</td>
<td>$cdliste</td>
</tr>";

}

echo "</table>";

}

?>

ich gehe jetzt mal davon aus, dass du eine volltextsuche realisieren willst, die alle felder unabhngig voneinander durchsucht. d.h. entweder im 1. feld oder im 2.feld oder...

willst du dass der suchbegriff in ALLEN oder in mehreren felder vorkommen muss, dann ersetzen du OR mit AND bzw. musst bei kombination ausdrcke in klammern setzen.

lg, ingo

Progman
23-04-2002, 00:48
MySQL bietet eine Volltextsuche an http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#Fulltext_Search

Andy
23-04-2002, 15:07
Hi Progman,

find ich gut das du genau das Thema anscheidest...
siehe mein betrag - das ding funktioniert nicht, wenigstens bei mir bzw. bei meinem Puretec-Account.... Warum aber?????

gre

Andreas

Progman
23-04-2002, 15:46
Fulltext search wird erst seit Version 3.23.23 untersttzt. Und sowas Funktioniert auch. Ggf. hilft einfach nur lesen (link oben)

Andy
24-04-2002, 02:00
Also auf dem Server luft MySQL 3.23.47-Max-log, das es erst aber der 3.23.23 geht steht ja gro und unbershebar in der doku, aber ich glaube eher das haben die von puretec fr ihre premium accounts gesperrt....

ich habe auf jedenfall keine andere idee mehr....