Seite 1 von 1

PHP: Suchfunktion

Verfasst: Mo Sep 13, 2010 10:24 am
von naums
Wer schonmal www.oettinger-games.net.tf näher angeschaut hat, wird bemerkt haben, dass die Suchfunktion dort das letzte ist. z.Z. findet die nur was wenn... $eingegeben=$spielname sonst nich. Natürlich macht es mehr Sinn wenn man nicht nur nach ganzen titeln suchen kann, sondern vllt. sollte ich die eingaben an bestimmten stellen mit explode zerhacken und kucken welcher Titel dem entspricht. Was weiß ich.... Das wenn z.B. jemand "top Gun" sucht, und ich hab 'Top Gun' und "Top Gun 2' in meiner Spielliste, dann wird zuerst der Suchstring "top gun" nach '"' durchsucht, um zu kucken, ob der Suchende vllt. doch nach dem exakten ausdruck sucht. Will er hier nicht, also wird der String am " " geteilt, und nach beide teilstrings mit allen Titeln in der DB mittels explode verglichen. Wenn jeweils ein Array von 2 oder mehr Elementen rauskommt, dann hat der Titel den Suchstring in sich. Dann nurnoch ausgeben und fertig :D

1. Würde das theoretisch funktionieren?
2. Macht PHP Unterschiede in Groß- und Kleinschreibung, bei strings?
3. Gibt es vllt. eine vorteilhaftere Funktion/Prozedur/Methode in PHP?

Re: PHP: Suchfunktion

Verfasst: Mo Sep 13, 2010 11:01 am
von Xin
naums hat geschrieben:Das wenn z.B. jemand "top Gun" sucht, und ich hab 'Top Gun' und "Top Gun 2' in meiner Spielliste, dann wird zuerst der Suchstring "top gun" nach '"' durchsucht, um zu kucken, ob der Suchende vllt. doch nach dem exakten ausdruck sucht. Will er hier nicht, also wird der String am " " geteilt, und nach beide teilstrings mit allen Titeln in der DB mittels explode verglichen. Wenn jeweils ein Array von 2 oder mehr Elementen rauskommt, dann hat der Titel den Suchstring in sich. Dann nurnoch ausgeben und fertig :D

1. Würde das theoretisch funktionieren?
Ja.

Üblicherweise suchen Suchmaschinen aber nicht nach Strings, weil das zu lange dauert, sondern nach IDs. Bei einer kleinen Website kannst Du das aber durchaus so handhaben, wie Du es beschrieben hast.
naums hat geschrieben:2. Macht PHP Unterschiede in Groß- und Kleinschreibung, bei strings?
Auf Wunsch ja. Du wirst allerdings vermutlich eher die Datenbank suchen lassen. SQL sucht glaube ich ohne Unterscheidung, aber ich bin sicher, dass sich das auch einstellen lässt.
naums hat geschrieben:3. Gibt es vllt. eine vorteilhaftere Funktion/Prozedur/Methode in PHP?
Wie gesagt: Ich sehe hier die Lösung eher in SQL.

=> SELECT * FROM table WHERE name like "%$SUCHBEGRIFF%" OR description like "%$SUCHBEGRIFF%"

Re: PHP: Suchfunktion

Verfasst: Mo Sep 13, 2010 11:50 am
von naums
SELECT * FROM table WHERE name like "%$SUCHBEGRIFF%"

wobei name hier eine spalte sein soll, nor? ^^ ich hätte eher alles erstmal ausgelesen und dann mittels explode gekuckt, aber das dauert im gegensatz zu der SQL Variante wirklich schweine lange.

Re: PHP: Suchfunktion

Verfasst: Mo Sep 13, 2010 12:17 pm
von Xin
naums hat geschrieben:SELECT * FROM table WHERE name like "%$SUCHBEGRIFF%"

wobei name hier eine spalte sein soll, nor? ^^
Yepp.
naums hat geschrieben:ich hätte eher alles erstmal ausgelesen und dann mittels explode gekuckt, aber das dauert im gegensatz zu der SQL Variante wirklich schweine lange.
PHP wird interpretiert, das dauert länger als optimierte Routinen von SQL. Außerdem müssen alle Daten erstmal kopiert werden, um sie auszusortieren. Mit SQL werden nur die Daten kopiert, die Dich interessieren.

Allgemein ist die Sache noch effizienter, wenn Du nur kopierst, was Dich interessiert, z.B.
SELECT id, name, description FROM table WHERE name LIKE "%$SUCHBEGRIFF%" OR description LIKE "%$SUCHBEGRIFF%"

Re: PHP: Suchfunktion

Verfasst: Mo Sep 13, 2010 3:06 pm
von naums
den Teil nach dem OR kann ich aber auch weglassen???

und was passiert eigentlich, wenn in einer Tabelle nichts drin steht, und ich trotzdem einen abfrage->fetch_assoc() ausführen lasse? Lässt sich der Fehler mit if ($res=$abfrage->fetch_assoc()) verhindern?

Code: Alles auswählen

$db=new mysqli("localhost", "user", "pswd", "db");
$abfrage=$db->query($query, MYSQLI_STORE_RESULT);
if ($res=$abfrage->fetch_assoc())
{

}

Re: PHP: Suchfunktion

Verfasst: Mo Sep 13, 2010 3:38 pm
von Xin
naums hat geschrieben:den Teil nach dem OR kann ich aber auch weglassen???
Natürlich, die Frage ist halt, über welche Einträge der Datenbank Du suchen möchtest.
naums hat geschrieben:und was passiert eigentlich, wenn in einer Tabelle nichts drin steht, und ich trotzdem einen abfrage->fetch_assoc() ausführen lasse? Lässt sich der Fehler mit if ($res=$abfrage->fetch_assoc()) verhindern?
Kenne ich den internen Aufbau Deiner Datenbank-Klasse? ^^

Re: PHP: Suchfunktion

Verfasst: Di Sep 14, 2010 3:29 pm
von Dominik
mysqli ist doch öffentlich zugänglich ^^

Re: PHP: Suchfunktion

Verfasst: Di Sep 14, 2010 4:03 pm
von Xin
Dominik hat geschrieben:mysqli ist doch öffentlich zugänglich ^^
Mein Gedächtnis befindet sich auch unter external-brain.com, trotzdem weißt Du nicht alles auswendig, was drin steht, oder? ^^

Re: PHP: Suchfunktion

Verfasst: Mi Sep 15, 2010 8:36 pm
von naums
am besten ich probiers einfach mal selbst aus :)