SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 24.09.2002, 20:27:20
Benutzerbild von Swordfish
Swordfish Swordfish ist offline
Anfänger
 
Registriert seit: Apr 2002
Beiträge: 46
MySQL-Datenbank durchsuchen

Hi all

Ich bastle gerade an einer Suchmaschine für ein Shop-System. Dabei wird die Shop-Datenbank wahlweise in der Spalte "Artikelname" oder "Artikelbeschreibung" durchsucht.
(Beispiel für Suche in "Artikelname":
Code:
$result=mysql("$db","SELECT DISTINCT * FROM artikel WHERE ArtName LIKE '%$suchstr%' ORDER BY ArtName");
wobei '$suchstr%' die Eingabe aus dem Such-Feld ist)

Nun habe ich drei Probleme damit:


1) Was gibt $result aus, wenn nichts gefunden wurde? Ich würde dann gerne eine Error-Message ausgeben lassen...

2) In der Datenbank sind sämtliche Umlaute als html-konforme Zeichen (z. B. & auml; usw.) gespeichert. Es wird aber niemand z. B. nach 'E-B& auml;sse' sondern nach 'E-Bässe' suchen... kann ich also sämtliche Umlaute des Suchstrings irgendwie zu & auml; usw. umwandeln?

3) Gibt es eine (vielleicht nicht allzu komlizierte) Möglichkeit, die Erkennung oder 'Toleranz' von Suchbegriffen einzubauen? Mit der obigen Methode wird ja nur etwas gefunden, wenn genau nach dem Artikelnamen bzw. nach der Artikelbeschreibung gesucht wurde. Ein einfacher Tippfehler führt dazu, dass ein Artikel nicht gefunden wird. Kann man z. B. irgendeine 'Tipp-Fehler-Toleranz' einbauen, ohne dass man für jeden Artikel in der Datenbank sämtliche 'falschen' Versionen eintragen muss?


PS: habe extra nach dem '&' bei den Sonderzeichen einen Abstand gemacht, da das Forum die Zeichen sonst zu ä, ö, ü konvertiert....
__________________
thx @ all!


Swordfish
Mit Zitat antworten
  #2  
Alt 24.09.2002, 20:35:55
Ben20
Guest
 
Beiträge: n/a
1. $result enthält immer "Ressource id irgendwas" - die eigentlichen Werte erhälst Du mit mysql_fetch_row, mysql_fetch_array oder auch mysql_result.
Du kannst aber prüfen wieviele Datensätze selektiert wurden und zwar mit mysql_num_rows()

$anzahl = @mysql_num_rows($result).

Wenn kein Datensatz gefunden wurde ist $anzahl 0 wenn dem so ist gebe eine Fehlermeldung aus.
BTW. Was ist eigentlich mysql() für eine Funktion - müßte die nicht mysql_query() heißen?


2. mit str_replace() kannst Du Zeichen(ketten) ersetzen.

$neueeingabe = str_replace("Ü", "& Uuml;", $alteeingabe);

Damit ersetzt du alle Ü durch & Uuml;


3. Du kannst in der Abfrage Jokerzeichen verwenden * z.b. allerdings wird dir das nix nützen da das Programm ja nicht weiß, was es mit * codieren soll. Was Du machen kannst, ist jedoch eine Art Gedächnis zu integrieren. Du kannst speichern nach was von Kunden schon gesucht worden ist (entferne daraus die Leerzeichen und kannst schonmal ein unötiges Leerzeichen tolerieren). Wenn jemand nun nach ähnlichen Suchbegriffen sucht, kannst Du dem User anbieten auch nach den schon vorhandenen Begriffen zu suchen (Ähnlich wie bei Googles: Meinten Sie: sowieso? )


Hoffe das hilft ein wenig.
Mit Zitat antworten
  #3  
Alt 24.09.2002, 21:49:55
Benutzerbild von Swordfish
Swordfish Swordfish ist offline
Anfänger
 
Registriert seit: Apr 2002
Beiträge: 46
Nun, das hilft schon viel!

1+2: Thx, das war genau, wonach ich suchte!

Ist gut möglich, dass msyql() keine gültige Funktion ist, das habe ich in irgendeinem Tutorial so gelesen und es hat immer funktioniert...


3: Ja, das wäre eine gute Möglichkeit...

Aber wie würde php rausfinden, dass der Suchbegriff einem schon mal gesuchten "ähnlich" ist? Wäre relativ kompliziert, über php "ähnlich" zu definieren, nich? Nimmt man z. b. "Übereinstimmung der ersten 3 Buchstaben", so gibt es immer noch viele Worte, vor allem lange, die absolut nichts miteinander zu tun haben, nur gleich beginnen...

Wenn es irgendwo eine Duden-Datenbank oder so geben würde, könnte man zu der connecten und dann nach ähnlichen Worten suchen, solch eine Datenbank aber selbst zu basteln ist wohl etwas zu schwierig (und viel zu aufwendig ;)

Am Besten in dieser Hinsicht finde ich immer noch die Suche bei amazon. Dort wird z. B. die Blues-Brothers-DVD gefunden, auch wenn man total falsch nach "blus brohe" gesucht hat... wenn man nur irgendso was ähnliches machen könnte...
__________________
thx @ all!


Swordfish

Geändert von Swordfish (24.09.2002 um 21:53:17 Uhr)
Mit Zitat antworten
  #4  
Alt 24.09.2002, 23:13:52
Benutzerbild von Swordfish
Swordfish Swordfish ist offline
Anfänger
 
Registriert seit: Apr 2002
Beiträge: 46
Habe 1. und 2. ausprobiert. 1. funzt wie es sollte, aber mit 2. habe ich noch meine Mühe :)

Wie muss ich das machen, wenn ich ALLE ä,ö,ü,Ä,Ö,Ü ersetzen will? mit deinem Beispiel kann ich ja nur jeweils eines der sechs ersetzen... Wenn ich alle einfach aneinanderhänge, gibt es den Error "Wrong parameter count for str_replace()..." Muss ich die einzeln ersetzen?
__________________
thx @ all!


Swordfish
Mit Zitat antworten
  #5  
Alt 24.09.2002, 23:40:02
Ben20
Guest
 
Beiträge: n/a
Für jeden Buchstaben mußt Du ein str_replace() machen. Theoretisch kannst Du auch einen regulären Ausdruck verwenden, aber die andere Methode ist wohl einfacher und schneller.

Zu 3. Ähnlich kannst du definieren, indem Du bestimmte Regeln definierst, so dass sich ähnliche Begriffe auch ähnlich sind. Bsp:

Zuerst alles kleinschreiben.

So ist "Hallo" und "hallo" schon mal ähnlich


Dann alle Leerzeichen entfernen.

So ist "hallo du" gleich "hallodu"

Dann alle Umlaute umwandeln

So ist "hallodadrüben" gleich "hallodadrueben"


Das Schwierige ist jetzt rauszubekommen, welche Regeln noch sinn machen. Aber deshalb hat es ja einen Menschen, der sich das ausdenken kann, sonst bräuchte man ja keine Programmierer mehr ;-)

Theoretisch gibts noch die mysql - Funktion SOUNDEX() die vergleicht Zeichen danach ob sie gleich klingen. Allerdings ist das wohl nicht ganz ausgereift und es funktioniert nur für englische Ausprache.
Mit Zitat antworten
  #6  
Alt 25.09.2002, 08:52:35
MiH MiH ist offline
Member
 
Registriert seit: Aug 2002
Beiträge: 775
du könntest ein preg_replace() auf das suchwort anwenden, da du hier einen array verwenden kannst. sowohl für suchbegriffe als auch für die ersetzenden zeichen und danach schickst du das wort an mySQL.

Code:
$patter = array("|& uuml;|","|& ouml;|");
$replace = array("ü","ö");
$search = preg_replace($patter,$replace,$search);
Mit Zitat antworten
  #7  
Alt 26.09.2002, 14:36:11
Benutzerbild von Swordfish
Swordfish Swordfish ist offline
Anfänger
 
Registriert seit: Apr 2002
Beiträge: 46
Danke euch beiden. Werde wohl mit den Regeln noch ein bisschen rumspielen müssen, bis ich etwas vernünftigs finde...

@Ben20: Und was passiert, wenn der Mensch, der sich das Ganze ausdenkt, ein Programmierer ist? ;)
__________________
thx @ all!


Swordfish
Mit Zitat antworten
  #8  
Alt 26.09.2002, 21:09:03
Ben20
Guest
 
Beiträge: n/a
Dann sind doch alle Probleme gelöst ;-)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:41:48 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt