suche in text

suche in text

am 08.05.2006 09:30:21 von Bob Bedford

Hello,

ich habe eine tabelle mit telefon nummer.

Ich möchte die selbe nummer suche.

tabelle person: idperson, firstname, lastname, address, phone1, phone2,
mobile, fax, email

hier sind die records:

tabelle user, field phone1
051/555.55.55
0515555555
051 555 55 55
051-555-55-55

ich mochte finden die nummer in the mysql tabelle. Wie can ich [remove]
diese "/", "-" unsw. ???
also can ich finden die nummer when habe ich viele fields ?

in meine case, ich have phone1, phone2, mobile, fax nummer.
can ich finden die selbe nummer when phone1 ist 051/555.55.55 and phone2 in
eine andere record ist 051555555

die resultat ich mochte is der name den person das hast viele record in
meine database. ich mochte die email address für senden an email.

select person1.email, person1.firstname, person1.lastname from person1,
person2 where removeallbutnumbers(person1.phone1) =
removeallbutnumbers(person2.phone1) or removeallbutnumbers(person1.phone1) =
removeallbutnumbers(person2.phone2), etc.....

Vielen dank und entshuldigung für meine Deutsch.

Re: suche in text

am 08.05.2006 13:07:12 von Kai Ruhnau

Bob Bedford wrote:
> ich habe eine tabelle mit telefon nummer.
>
> Ich möchte die selbe nummer suche.
>
> tabelle person: idperson, firstname, lastname, address, phone1, phone2,
> mobile, fax, email
>
> hier sind die records:
>
> tabelle user, field phone1
> 051/555.55.55
> 0515555555
> 051 555 55 55
> 051-555-55-55
>
> ich mochte finden die nummer in the mysql tabelle. Wie can ich [remove]
> diese "/", "-" unsw. ???
> also can ich finden die nummer when habe ich viele fields ?
>
> in meine case, ich have phone1, phone2, mobile, fax nummer.
> can ich finden die selbe nummer when phone1 ist 051/555.55.55 and phone2 in
> eine andere record ist 051555555

Um die ganzen Zusatzzeichen herauszufiltern hatte ich mir früher mal
folgendes zusammengeschrieben. Nicht schön, aber selten:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
tabelle.feld
,' ',''),'+',''),'(',''),')',''),'-',''),'[',''),']','')

Kann natürlich noch beliebig ergänzt werden.

> die resultat ich mochte is der name den person das hast viele record in
> meine database. ich mochte die email address für senden an email.
>
> select person1.email, person1.firstname, person1.lastname from person1,
> person2 where removeallbutnumbers(person1.phone1) =
> removeallbutnumbers(person2.phone1) or removeallbutnumbers(person1.phone1) =
> removeallbutnumbers(person2.phone2), etc.....

Da du mehrere Telefonnummernfelder hast, würde ich die als
Zwischennormalisierung mit Referenz auf den Ursprungsdatensatz in eine
temporäre Tabelle schreiben, etwa in der Art

INSERT INTO temp SELECT idperson, phone1...;
INSERT INTO temp SELECT idperson, phone2...;

Und darin ein

SELECT *
FROM temp
GROUP BY REPLACE(REPLACE(... ))
HAVING COUNT(*)>1

machen.
Das erspart dir die ganzen ORs.

Grüße
Kai

Re: suche in text

am 08.05.2006 14:13:20 von Johannes Vogel

Hi Kai

Kai Ruhnau wrote:
> Bob Bedford wrote:
>> hier sind die records:
>> tabelle user, field phone1
>> 051/555.55.55
>> 0515555555
>> 051 555 55 55
>> 051-555-55-55
>> ich mochte finden die nummer in the mysql tabelle. Wie can ich
>> [remove] diese "/", "-" unsw. ???

> Um die ganzen Zusatzzeichen herauszufiltern hatte ich mir früher mal
> folgendes zusammengeschrieben. Nicht schön, aber selten:
> REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
> tabelle.feld
> ,' ',''),'+',''),'(',''),')',''),'-',''),'[',''),']','')

Wir sind zwar in d.c.d.mysql, trotzdem sei folgendes nicht unerwähnt:

Meist ist es günstiger, diese removes in der Client-Applikation
durchzuführen, weil da bspw. Regular Expressions zum Ersetzen möglich
sind. Bsp in PHP:

$phone1 = preg_replace('=[^0-9]=', '', $phone1);

und erst diesen Wert dann in die DB einfüllen...

Wann kommen endlich RegExp-Funktionen ins MySQL-API rein, die mir
Ersetzen von Strings erlauben? Das wäre für mich schon mehrmals
wünschenswert gewesen!

HTH, Johannes