php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-10-2010, 17:28
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Fehlertollerante Suche

Hallo,


Ich würde gerne in eine Suche (Suche nach einem Wort) eine gewisse Fehlertolleranz (ggü. dem originalen DB-Inhalt) erlauben / ermöglichen. Es geht hierbei nur um 'Sonderzeichen' (zb. ä, ö, ü, ...).

Die Daten / Worte werden in einer MySQL-Datenbank im HTML-Format gespeichert. Das ü also als ü, usw. Nun soll es dem Suchenden aber möglich sein einen 'Fehler' im Wort (ggü. der DB) zu haben. So soll also beim Suchbegriff "Boese" auch "Böse" gefunden werden - das als Beispiel.

Meine Idee war im ersten Moment, für jedes Sonderzeichen ein Array anzulegen in welchem die versch. Möglichkeiten drin sind. Diese dann wiederum werden abgefragt, sollte ein solches Zeichen im Suchbegriff vorhanden sein - bzw. im Suchbegriff ersetzt, ...
Gibts da irgend eine bestimmte Vorgabe welche man einhalten muss, oder gar etwas fertiges seitens PHP?
Oder habt ihr eine bessere Idee?


Gruss
Mit Zitat antworten
  #2 (permalink)  
Alt 15-10-2010, 17:40
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von medium22 Beitrag anzeigen
Die Daten / Worte werden in einer MySQL-Datenbank im HTML-Format gespeichert. Das ü also als ü, usw.
Dieses „also“ bedingt nicht die logische Notwendigkeit, nach der es klingen möchte.
Wähle eine geeignete Zeichenkodierung, so dass du keine Entities für solche „Sonderzeichen“ brauchst.

Zitat:
Nun soll es dem Suchenden aber möglich sein einen 'Fehler' im Wort (ggü. der DB) zu haben. So soll also beim Suchbegriff "Boese" auch "Böse" gefunden werden - das als Beispiel.
Das lässt sich dann, wenn du obiges umgesetzt hast, schon allein durch die Wahl einer passenden Collation erreichen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 08-11-2010, 16:51
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hallo,


Ich hole den Thread nochmal hoch weil es im Prinzip um das selbe Grundthema geht - diesmal allerdings um MySQL, also bitte verschieben *g*

Es geht darum, dass die DB 'leichte' Schreibfehler erkennen soll. Ich wurde dann auf SOUNDEX aufmerksam gemacht und versuchte mich sogleich daran - jedoch ohne Ergebnis.

Code:
 SELECT name, zusatzinfo, date
FROM liste
WHERE frei =1
AND SOUNDEX(name) = SOUNDEX("%Zleip%")
ORDER BY name
LIMIT 0 , 30
Original wäre "Sleip", die DB sollte aber auch 'Leip', etc. erkennen - soll damit ja eigentlich möglich sein wie man im www so liest. Der Suchbegriff ist unterschiedlich lang, jedoch nie kürzer als 3 Zeichen (soundex benötigt mind 4, ich weiss - aber die 3 Zeichen treffen auf max. 10 Zeilen zu, daher akzeptabel). 'name' ist als varchar(50) definiert - muss es ggf. ein text-feld sein?


Gruss & Danke
Mit Zitat antworten
  #4 (permalink)  
Alt 08-11-2010, 17:59
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

mal davon abgesehen, dass du soundex falsch benutzt, wird es wohl für die deutsche Sprache wenig gewinnbringend sein, weil die zugrundeliegende Phonetik nur für's Englische implementiert ist. Es gibt aber auch eine deutsche Soundex-Implementation von einer gewissen Dame hier aus dem Forum.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 08-11-2010, 18:14
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Was würden wir alle machen wenn wir dich nicht hätten! <luftigkuss schick>

Werde ich mir die Tage mal genauer anschauen - mal schauen ob mein Hoster das überhaupt zulässt. *g*


Danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 08-11-2010, 20:59
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Bin nun doch eher dazu gekommen - so kurz vorm schlafen.

Code eingefügt > Fehlermeldung 'delimiter;', aber die Routinen wurden trotzdem angenommen - sie werden jedenfalls angezeigt. Führe ich nun folgenden Query in phpma aus...

Code:
SELECT name, zusatzinfo, date
FROM liste 
WHERE frei =1
AND soundex_de(name) = soundex_de('Zleip')
ORDER BY name
LIMIT 0 , 30
bekomme ich
#1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_unicode_ci,COERCIBLE) for operation 'regexp' als Fehlermeldung. So ganz werde ich daraus nicht schlau. Habe aber trotzdem mal die Tabelle in der ich Abfrage auf utf8 gesetzt (jede Spalte als auch die Tabelle selbst), am Ergebnis änderte sich aber nichts.

Woran kann das liegen? Vielleicht das mein Hoster irgend etwas davon nicht unterstützt oder doch an der Kollation?
Mit Zitat antworten
  #7 (permalink)  
Alt 08-11-2010, 21:22
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hm, dazu fällt mir grad nicht viel ein, aber ich hab es ausprobiert. Die ganze Tabelle ist bei mir utf8_general_ci, damit auch die Spalte last_name. Folgende Statements habe ich ausprobiert mit der Ausgabe dahinter:

Code:
select soundex_de(`last_name`) from `caller` limit 1; --> 882
select soundex_de(convert(`last_name` using latin1)) from `caller` limit 1; --> 882
select soundex_de(convert(`last_name` using binary)) from `caller` limit 1; --> 882
select soundex_de(cast(`last_name` as binary)) from `caller` limit 1; --> 882
Bei mir funktioniert es also mit allem, von binär über ANSI bis zu UTF-8. Meine Version: MySQL 5.1.50

Edit: zeig mir mal deine Ausgabe für folgende Statements:
Code:
show function status;
use `SCHEMA`; -- ersetze SCHEMA durch den Wert der Spalte Db aus der vorherigen Abfrage
show create function `soundex_de`;
show create function `strip_non_alpha`;
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (08-11-2010 um 21:36 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 09-11-2010, 15:10
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Seltsame Sache..

- die Datenbank selbst hat MySQL-Zeichensatz: UTF-8 Unicode (utf8)
- die meisten Tabellen (alle bis auf die aus der ich abfrage, die hat utf8_general_ci) haben latin1_swedish_ci als Kollation

Führe ich nun deine Anweisung untern dem Reiter 'SQL' in dieser Tabelle (liste) aus..
Code:
show function status;
use `liste`; -- ersetze SCHEMA durch den Wert der Spalte Db aus der vorherigen Abfrage
show create function `soundex_de`;
show create function `strip_non_alpha`;
..., erhalte ich #1044 - Access denied for user 'xxx'@'%' to database 'liste'

Führe ich deine Anweisung unter dem Reiter 'SQL' in der Gesamtübersicht aller Tabellen aus...

Code:
show function status;
use `xxx`; -- ersetze SCHEMA durch den Wert der Spalte Db aus der vorherigen Abfrage
show create function `soundex_de`;
show create function `strip_non_alpha`;
..., erhalte ich folgendes:



Die Funktion 'soundex_de' wird also gar nicht ausgegeben bzw. kreiert.
Mit Zitat antworten
  #9 (permalink)  
Alt 09-11-2010, 15:19
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ahja, da haben wir es schon. Der hat due Funktionen als latin1 angelegt. Mach mal die beiden Funktionen wieder weg (drop function), geh mit use in ein Schema, welches utf8 als default charset besitzt, stell sicher, dass der Verbindungszeichensatz auch utf8 ist und führ den Code dann nochmal aus.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #10 (permalink)  
Alt 09-11-2010, 16:07
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ich konnte ihn auch so direkt bearbeiten/editieren und einfach latin1 durch utf8 ersetzen - hat er/sie gefressen *g*

Wenn ich nun die obige Abfrage ausführe kommt schon mal keine Fehlermeldung mehr, dennoch wird der 'Schreibfehler' (Sleip / Zleip) nicht erkannt. Der Test mit der Suche nach 'tark' (statt 'Dark') bringt allerdings ein Ergebnis - funktioniert also schon. :-)


Wie kann ich das der Routine beibringen? Kenne mich mit solch komplexen Dinge nicht wirklich aus.
Also sozusagen, dass 's' und 'z' gefolgt von egal was (ebenso das davor) ebenfalls ein Ergebnis bringt.
Mit Zitat antworten
  #11 (permalink)  
Alt 09-11-2010, 16:11
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich weiß nicht, was du meinst.
Code:
mysql> select soundex_de('zleip'), soundex_de('sleip');
+---------------------+---------------------+
| soundex_de('zleip') | soundex_de('sleip') |
+---------------------+---------------------+
| 851                 | 851                 |
+---------------------+---------------------+
1 row in set (0.02 sec)
Sicher, dass er es "gefressen" hat? Eventuell ist er trotzdem nicht so, wie er sein sollte. Das könnte zumindest erklären, warum bei dir sleip und zleip nicht denselben Hash bringt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #12 (permalink)  
Alt 09-11-2010, 17:21
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ich nehm's zurück - vielleicht sollte ich einfach mal eine Woche am Stück schlafen! Funktioniert natürlich > Bedienungsfehler.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Suche Script Biete/Suche snooptb Apps und PHP Script Gesuche 2 26-03-2007 15:30
[SUCHE] Counter Script [/SUCHE] zorb! Jobgesuche 1 05-09-2005 12:23
[Suche] Suche verlässlichen webspace. ... The_God Provider / Domains 29 28-07-2004 09:38
[Suche] Suche Infos über Reseller Webspace!? Snikob Provider / Domains 5 04-03-2004 21:27
Suche[Ich such nicht hab ne Suche geschreibe] mnhg Apps und PHP Script Gesuche 1 17-09-2003 17:51

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:36 Uhr.