Hallo Jnnbo,
OK, das verstehe ich, aber ich habe es schon mehrfach gesagt, dass meine Daten genau so in der Datenbank stehen wie ich sie auch in das Suchfeld eintrage, aber TS geht auf dieses überhaupt nicht ein bzw. beachtet es überhaupt nicht.
Weil es trotzdem Sinn macht, die Daten vor der Arbeit zu normalisieren. Die Erfahrung zeigt, dass Menschen Fehler machen. Mit der Normalisierung erschlägst du eine vollständige Fehlerklasse.
Für ihn ist nur seine MYSQL Funktion richtig, alles andere nicht.
Das unterstellst du ihm in deinem Frust. Ich schätze TS nicht so ein. (Gunnar übrigens auch nicht.)
Ich verstehe auch nicht, warum du das immer so in den Wind schlägst was andere dir sagen. Du kommst mir manchmal vor wie ein Ertrinkender, der in Süsswasser schwimmt und ruft „Hilfe, ich verdurste.“ Wir verarschen dich idR nicht. Meistens hat das Hand und Fuss, was hier gesagt wird.
Mal zurück zum fachlichen: wenn du wirklich eine Ähnlichkeit implementieren willst, dann macht das am ehesten Sinn über eine MySQL-Stored-Procedure. Mal ein Beispiel wie so etwas aussehen könnte, allerdings UNGETESTET weil ich gerade kein MySQL hier habe:
delimiter //
CREATE FUNCTION comparePhoneNos(number1 varchar(50), number2 varchar(50)) RETURNS float
BEGIN
DECLARE pos int DEFAULT 1;
DECLARE len int;
DECLARE len1 int;
DECLARE equal_chars int DEFAULT 0;
DECLARE unequal_chars int DEFAULT 0;
SET len = char_length(number1);
SET len1 = char_length(number2);
WHILE pos <= len AND pos <= len1 DO
IF substr(number1, pos, 1) != substr(number2, pos, 1) THEN
SET unequal_chars = unequal_chars + 1;
ELSE
SET equal_chars = equal_chars + 1;
END IF;
SET pos = pos + 1;
END WHILE;
RETURN equal_chars * 100.0 / (unequal_chars + equal_chars);
end //
delimiter ;
Diese Funktion rufst du über SELECT kundennr FROM kunden WHERE comparePhoneNos(telno, '1234') >= 80.0
auf. Das liefert dir alle Datensätze, in denen 80% oder mehr Zeichen gleich sind in der Telefon-Nummer.
LG,
CK