ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
664
664
EMPFEHLEN
-
26.01.04 21:28 #1
- Registriert seit
- Jan 2004
- Ort
- Baden-Wuerttemberg
- Beiträge
- 44
Ich habe folgendes Problem:
Ich habe eine Suchmaschine mit PHP programmiert, die Datensätze aus eine MySQL Datenbank ausliest. Er soll aber natürlich nur die Datensätze anzeigen, nach denen gesucht wurde. Also habe ich eine If Abfrage eingebaut. Allerdings zeigt er jetzt nur noch einen Datensatz an, wenn genau dieser eingegeben wurde. Gibt es eine Möglichkeit (statt if($searchname == $row['searchname']), dass er auch Datensätze anzeigt, die eine Ähnlichkeit haben. Ich habe Beispielsweise eine Datensatz mit dem Name 'google.de'. Wie mache ich es, dass er auch diesen Datensatz anzeigt, wenn der Benutzer nur 'google' oder 'Google' angibt?
Danke schonmal im Vorraus
MagicMasterII
-
Hi,
liest du beim Abfragen der MySQL Datenbank etwa alle Daten aus ? Wenn ja korrigiere doch einfach dein Query in Richtung:
Wenn du darauf angewiesen bist alle Datensätze abzufragen und im Nachhinein zu filtern kannste für PHP ja folgendes nehmen:PHP-Code:$result = @mysql_query("SELECT column1,column2,column3 FROM table WHERE column2 LIKE '%google%'",$mysql_id);
Gruß thingPHP-Code:if (stripos($row['searchname'],$searchname) !== FALSE) {
...
}
-
27.01.04 14:08 #3
- Registriert seit
- Jan 2004
- Ort
- Baden-Wuerttemberg
- Beiträge
- 44
Irgendwie funktioniert dein Code nicht...
So sieht es bei mir aus:
PHP-Code:<html>
<head>
</head>
<body style="border: 2px solid #FF9000" bgcolor="#303030" text="#FFFFFF" link="#FF8C00" vlink="#FF8C00" alink="#696969">
<style>
body
{
scrollbar-DarkShadow-Color:#FFFFFF;
scrollbar-Track-Color:#505050;
scrollbar-Face-Color:#333300;
scrollbar-Shadow-Color:#606060;
scrollbar-Highlight-Color:#FFFFFF;
scrollbar-3dLight-Color:#606060;
scrollbar-Arrow-Color:#FF6600;
}
</style>
<font face="Comic Sans MS,Edwardian Script ITC">
<?php
error_reporting(E_ALL);
include 'config.php';
// Konfigurationsdatei laden
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
// Hier kann man jetzt MySQL-Querys senden
$sql = "SELECT
searchname,
link
FROM
search;";
// Das am Anfang immer ein paar Leerzeichen stehen
// ist für MySQL uninteressant.
// Hier würde sich sogar die Heredoc schreibweise
// eignen
$result = mysql_query($sql) OR die(mysql_error());
echo "Resultate:<br /><br />\n";
$searchfound = 0;
while($row = mysql_fetch_assoc($result)) {
if($searchname == $row['searchname']) {
echo "<table border=1><tr><td>";
echo "</td><td valign=\"top\"><a href=\"".$row['link']."\">".$row['searchname']."</a><br />\n";
echo "</td></tr></table>";
$searchfound = 1;
}
}
if ($searchfound == 0) {
echo "Keine Seite konnte gefunden werden.";
}
?>
</font>
</body>
</html>
-
27.01.04 14:18 #4Ohne Deinen Quellcode durchgesehen zu haben:Irgendwie funktioniert dein Code nicht...
Was funktioniert nicht?
Woran siehst Du das?
Was passiert, wenn Du welche Suchbegriffe einsetzt?
Welche Datensätze werden gefunden?
Weche Datensätze sollten gefunden werden?
Mach Dir mal ein bisschen Mühe ...
snuu
// EDIT:
Du scheinst den Beitrag von thing überhaupt nicht berücksichtigt zu haben. Ich kann keine LIKE-Klausel im SQL-Statement entdecken.Geändert von Sven Petruschke (27.01.04 um 14:20 Uhr)
Das Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
www.sven-petruschke.de
-
Ich kann Dir keine Code liefern, weil mit PHP kenn ich mich nicht sehr aus, aber ich kann Dir ein mögliches Prinzip erklären, wie Deine Suche funktionieren sollte.
schrittweise erklärt
1. musst Du damit beginnen, Deinen eingegebenen Begriff zu zerlegen in seine Bestandteile.Das heisst Du musst Anzahl der eingegebenen Buchstaben abfragen.
2. nun musst Du mit dem ersten Buchstaben beginnend, in Deinem Beispiel Google das G in der DB zu suchen.
3. sobald er ein G gefunden hat, muss er Deinen nächsten Buchstaben hoolen, also das o, und muss vergleichen, ob der Buchstabe nach dem in der DB gefundenen G auch wieder übereinstimmt, und auch ein o ist.
4.Schritt drei wird so lange wiederholt, bis entweder keine übereinstimmung mehr da ist, oder die Anzahl der eingegebenen Buchstaben erreicht ist.
falls die Anzahl Buchstaben erreicht wurde, musst Du diesen Datensatz, als Kanditaten zur Ausgabe zwischenspeichern.
Ich hab das ganze natürlich jetzt sehr kurz gehalten, und es ist gut möglich, dass ich noch das eine oder andere vergessen hab, aber wenn Du Dir mal genau überlegst wie so ein Suchalgorythmus funktionieren sollte, in Sprachlicher form, dann wirst Du das nachher auch programmieren können.downloaded Linux
-
Mmh...
Verstehst du was du da für Code hast ? Du hast eine MySQL Datenbank in der viele Datensätze liegen. Du möchstest jetzt (im Rahmen einer Suchfunktion) Datensätze aus der Tabelle ziehen.
Deine Methode:
Ich besorge mir alle Datensätze aus der Tabelle, gehe sie Zeile für Zeile in einer while-Schleife durch und wenn der eingegebene Suchbegriff dem Wert einer definierten Spalte (in deinem Fall anscheinend searchname) gleicht, dann gebe ich ihn aus.
1. Problem
Deine Methode ist absolut nicht performant weil du (angenommen deine Datenbank hätte 1000 Datensätze und davon enthalten 3 deinen Suchbegriff) ALLE Datensätze nach dem Suchbegriff durchsuchst und nicht nur die per MySQL besorgst in denen er auch wirklich vorkommt.
2. Problem
Die Ergebnisse sehen nicht so aus wie du denkst. Das liegt daran dass du dort if ($searchname == $row['searchname']) { stehen hast. Du machst einen direkten Vergleich zwischen 2 Variablen. Dein Suchstring hingegen ist ja nur ein Teil des Wertes aus der Tabelle, also schau doch einfach (siehe mein Posting) mit if (stripos($row['searchname'],$searchname) !== FALSE) { nach ob der String $searchname im String $row['searchname'] vorkommt.
Diese zwei Probleme kannst du jetzt aber locker anders lösen in dem du dein MySQL Query so designst, dass du schonmal nur die Datensätze bekommst in denen dein Suchbegriff auch vorhanden ist (steht auch in meinem Posting) wobei du darauf achten solltest, dass in MySQL das % ein Platzhalter ist und nicht das * wie fast sonst überall. Dein 2. Problem tritt somit eigentlich garnicht mehr auf, weil du so oder so nur die Datensätze hast in denen der Suchbegriff vorkommt. Und wenn ich dir immer noch nicht helfen konnte, dann poste mal deinen Code MIT meinen Gimmicks
!
Gruß thing
-
27.01.04 16:29 #7
- Registriert seit
- Jan 2004
- Ort
- Baden-Wuerttemberg
- Beiträge
- 44
Das Problem ist, das beide deiner Codes nicht funktionieren. Bei dem mit stripos meldet er, dass die Funktion nicht definiert ist.Original geschrieben von thing
Mmh...
Verstehst du was du da für Code hast ? Du hast eine MySQL Datenbank in der viele Datensätze liegen. Du möchstest jetzt (im Rahmen einer Suchfunktion) Datensätze aus der Tabelle ziehen.
Deine Methode:
Ich besorge mir alle Datensätze aus der Tabelle, gehe sie Zeile für Zeile in einer while-Schleife durch und wenn der eingegebene Suchbegriff dem Wert einer definierten Spalte (in deinem Fall anscheinend searchname) gleicht, dann gebe ich ihn aus.
1. Problem
Deine Methode ist absolut nicht performant weil du (angenommen deine Datenbank hätte 1000 Datensätze und davon enthalten 3 deinen Suchbegriff) ALLE Datensätze nach dem Suchbegriff durchsuchst und nicht nur die per MySQL besorgst in denen er auch wirklich vorkommt.
2. Problem
Die Ergebnisse sehen nicht so aus wie du denkst. Das liegt daran dass du dort if ($searchname == $row['searchname']) { stehen hast. Du machst einen direkten Vergleich zwischen 2 Variablen. Dein Suchstring hingegen ist ja nur ein Teil des Wertes aus der Tabelle, also schau doch einfach (siehe mein Posting) mit if (stripos($row['searchname'],$searchname) !== FALSE) { nach ob der String $searchname im String $row['searchname'] vorkommt.
Diese zwei Probleme kannst du jetzt aber locker anders lösen in dem du dein MySQL Query so designst, dass du schonmal nur die Datensätze bekommst in denen dein Suchbegriff auch vorhanden ist (steht auch in meinem Posting) wobei du darauf achten solltest, dass in MySQL das % ein Platzhalter ist und nicht das * wie fast sonst überall. Dein 2. Problem tritt somit eigentlich garnicht mehr auf, weil du so oder so nur die Datensätze hast in denen der Suchbegriff vorkommt. Und wenn ich dir immer noch nicht helfen konnte, dann poste mal deinen Code MIT meinen Gimmicks
!
Gruß thing
Und bei der anderen sagt er:
You have an error in your SQL syntax near ''search' WHERE 'searchname' LIKE '%google%'' at line 1
MagicMasterII
-
Okay mein Fehler...
Die Funktion stripos(); existiert erst ab PHP5 (ist im CVS schon verfügbar) und du dürftest bestenfalls PHP4.x einsetzen.
Bei dem MySQL wäre es mal hilfreich wenn du den Code (mit LIKE drin) posten könntest...
Gruß thing
[edit]
Es gibt ein Äquivalent dazu in PHP3/4 das ich vorher nicht gesehen habe: strpos();
[/edit]Geändert von thing (27.01.04 um 16:49 Uhr)
-
27.01.04 17:03 #9
- Registriert seit
- Jan 2004
- Ort
- Baden-Wuerttemberg
- Beiträge
- 44
Jetzt funktioniert es mit der strpos-funktion... Aber nur wenn der Datensatz Beispielsweise 'Google' heißt und der User auch 'G' eingibt. Wenn er allerdings 'g' eingibt, wird der Datensatz nicht gefunden. Wie mache ich es aber, dass der Datensatz auch gefunden wird, wenn der Benutzer 'g' eingibt?Original geschrieben von thing
Okay mein Fehler...
Die Funktion stripos(); existiert erst ab PHP5 (ist im CVS schon verfügbar) und du dürftest bestenfalls PHP4.x einsetzen.
Bei dem MySQL wäre es mal hilfreich wenn du den Code (mit LIKE drin) posten könntest...
Gruß thing
[edit]
Es gibt ein Äquivalent dazu in PHP3/4 das ich vorher nicht gesehen habe: strpos();
[/edit]
Trotzdem Danke nochmal,
MagicMasterII
-
AAAHHH... Zeig mir doch bitte bitte bitte dein MySQL Query *heul* !
Ansonsten
$searchstring = strtolower($searchstring);
while (...) {
if (strpos(strtolower(...),$searchstring) !== FALSE) {
...
}
}
Gruß thing
-
27.01.04 18:03 #11Jetzt funktioniert es mit der strpos-funktion... Aber nur wenn der Datensatz Beispielsweise 'Google' heißt und der User auch 'G' eingibt. Wenn er allerdings 'g' eingibt, wird der Datensatz nicht gefunden. Wie mache ich es aber, dass der Datensatz auch gefunden wird, wenn der Benutzer 'g' eingibt?Code :
1
... where LCASE(Spaltenname) LIKE '%google%' ...
snuuDas Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
www.sven-petruschke.de
-
Laut MySQL Manual kannste die Funktion nur auf einen String anwenden. Der Spaltenname ist aber ein Spaltenname und kein String... Außerdem ist LIKE IMHO sowieso case-insensitive.
Gruß thing
-
27.01.04 18:36 #13
OK, hab's ausprobiert und die LIKE-Klausel ist wirklich case-insensitive. Dennoch kann man LCASE(Spaltenname) verwenden, um die Rückgabe der Datensätze aus der betreffenden Spalte in Kleinbuchstaben umzuwandeln. Und das funktioniert natürlich auch in der Where-Klausel für einen String-Vergleich. (Die Daten in der Spalte sind ja vom Typ String) Probier's aus.
mfg, snuuDas Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
www.sven-petruschke.de
-
Und wieder was gelernt... Funktioniert jetzt wenigstens alles so wie du wolltest ?
Gruß thing
-
27.01.04 19:47 #15
- Registriert seit
- Jan 2004
- Ort
- Baden-Wuerttemberg
- Beiträge
- 44
Nein, da ich nicht weiß, WO und WIE ich das einbauen muss. Ich habe doch meinen Code vorhin mal gepostet. Wie muss ich dass da einbauen, dass die Echo Befehle nur Ausgeführt werden, wenn der Suchstring in der Tabellenspalte enthalten ist, auch, wenn der Benutzer im Formular das Wort/den Buchstaben klein schreibt und er in der Datenbank groß ist. Außerdem ist der String, der enthalten sein muss, nicht festgelegt, sondern wird per HTML Formular an den PHP Script übermittelt.Original geschrieben von thing
Und wieder was gelernt... Funktioniert jetzt wenigstens alles so wie du wolltest ?
Gruß thing
MagicMasterII
Ähnliche Themen
-
Abfrage ähnlich --> Verwandte Themen auf tutorials.de
Von son gohan im Forum Relationale DatenbanksystemeAntworten: 17Letzter Beitrag: 14.09.05, 19:09 -
Ähnlich einfärben
Von Dark_Fighter im Forum PhotoshopAntworten: 6Letzter Beitrag: 20.08.04, 17:34 -
Dropdwonmenüs...oda so ähnlich
Von Tear im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 18.03.04, 17:35 -
if ( ähnlich)
Von melmager im Forum PHPAntworten: 12Letzter Beitrag: 21.08.02, 18:50 -
wie ähnlich....?
Von ttrenz im Forum Flash PlattformAntworten: 4Letzter Beitrag: 14.07.01, 22:49





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren