[MS SQL SERVER] Frage an die Profis > Bei SELECT auf Ähnlichkeiten prüfen

Andreas Dunstheimer

Erfahrenes Mitglied
Hallo, ich habe da mal ein etwas kniffliges Problem anzubieten, und hoffe, mir kann jemand helfen, oder zumindest einen Denkanstoss geben.

Ich habe folgende Problemstellung: Ich habe eine Tabelle, in der Bestellungen gespeichert sind. Hier habe ich die Informationen über die bestellten Artikel und auch Name und Adresse des Bestellers.

Wenn nun jemand über ein Webformular eine Bestellung auslöst (es handelt sich dabei um kostenlose Produktproben) soll vermieden werden, daß jemand innerhalb einer bestimmten Zeitspanne mehrfach die gleichen Produktproben bestellt. Es soll dabei auch möglichst vermieden werden, daß jemand das Programm durch (absichtliche und/oder unabsichtliche) Tipfehler austrickst.

Gibt es im MS SQL Server 2000 irgend eine Möglichkeit, die Benutzereingaben auf Ähnlichkeiten zu prüfen? (ähnlich wie die Funktion similar_text is PHP)

"SELECT spalte FROM tabelle WHERE feld IS SIMILAR benutzereingabe" oder irgendwie so ;-)


Gruß Dunsti
 
ja, die Funktion soundex() kenne ich, aber leider hab ich hier kein PHP :)

und ausserdem: das Ganze müsste aus Performance-Gründen schon irgend ne Funktion des SQL-Servers sein, sonst müsste ich ja erst riesige Mengen an Daten abfragen und diese dann per Schleife im Script vergleichen oder so...

Je nach Datenmenge dauert das ewig. ;)
 
Hallo sollte auch so funktionieren

PHP:
select SPALTE from TABELLE where FELD like '%Benutzereingabe%'

Gruß Ratze
 
Hey
vielen dank
die soundex() Funktion ist ja echt geil und immer wieder nützlich ;)


Inline Doku von MySQL-Querybrowser:
SOUNDEX(str)

Returns a soundex string from str. Two strings that sound almost the same should have identical soundex strings. A standard soundex string is four characters long, but the SOUNDEX() function returns an arbitrarily long string. You can use SUBSTRING() on the result to get a standard soundex string. All non-alphabetic characters in str are ignored. All international alphabetic characters outside the A-Z range are treated as vowels.

Important: When using SOUNDEX(), you should be aware of the following limitations:

This function, as currently implemented, is intended to work well with strings that are in the English language only. Strings in other languages may not produce reliable results.

This function is not guaranteed to provide consistent results with strings that use multi-byte character sets, including utf-8.

We hope to remove these limitations in a future release. See Bug#22638 for more information.

mysql> SELECT SOUNDEX('Hello');
-> 'H400'
mysql> SELECT SOUNDEX('Quadratically');
-> 'Q36324'
Note: This function implements the original Soundex algorithm, not the more popular enhanced version (also described by D. Knuth). The difference is that original version discards vowels first and duplicates second, whereas the enhanced version discards duplicates first and vowels second.

expr1 SOUNDS LIKE expr2

This is the same as SOUNDEX(expr1) = SOUNDEX(expr2).
 
Danke für den Hinweis, ich hab das Problem gelöst. Die Lösung ist gar nicht soweit von meiner ursprünglichen Idee entfernt:

Code:
SELECT * FROM tabelle
WHERE  difference ( vorname,'Andreas' )  > 3

Zur Info: die Funktion DIFFERENCE() vergleicht zwei SOUNDEX() Ergebnisse miteinander.

Gruß Dunsti
 
Zurück