Teilstringabfrage

Teilstringabfrage

am 07.08.2006 10:23:34 von Andreas Muschkat

Hallo,

ich möchte gerne in meiner Datenbank abfragen, ob eine Telefonnummer
schon eingetragen ist ist. Und zwar auch, ob dies in Teilen geschehen
ist. Beispiel:

Die Nummer 1234 ist schon eingetragen. Dann muß er mir die
Datensatz-ID-Nummer zurückgeben, wenn ich nach der Nummer "1", "12",
"123", "1234" frage. Ebenso auch bei "12340" oder "12342034878230".
Denn: Wenn jemand die Nummer 1234 hat, kann es keine Nummer 123 geben,
ebenso nicht die Nummer 12340 (hinten angestellte "0" hat keinen
Effekt bei einer gültigen Nummer).

SELECT id FROM user WHERE telefon LIKE '$telnr%'

findet nur 1, 12, 123 und 1234.

Theoretisch müßte die umgekehrten Werte die anderen finden:

SELECT id FROM user WHERE '$telnr%' LIKE 'telefon%'

wobei 'telefon%' natürlich nicht funktioniert, weil der hier nicht die
Zelle "telefon" sondern die Zeichenkette verwendet wird.

Würde das gehen, müßte es doch eigentlich mit

SELECT id FROM user WHERE telefon LIKE '$telnr%' OR '$telnr%' LIKE
'telefon%'

funktionieren, oder?


Wie müßte die korrekte Abfrage aussehen?

Andreas

Re: Teilstringabfrage

am 07.08.2006 10:29:07 von Frank Schenk

Andreas Muschkat wrote:
> Hallo,
>=20
> ich möchte gerne in meiner Datenbank abfragen, ob eine Telefonnummer
> schon eingetragen ist ist. Und zwar auch, ob dies in Teilen geschehen
> ist. Beispiel:
>=20
> Die Nummer 1234 ist schon eingetragen. Dann muß er mir die
> Datensatz-ID-Nummer zurückgeben, wenn ich nach der Nummer "1", "12",
> "123", "1234" frage. Ebenso auch bei "12340" oder "12342034878230".
> Denn: Wenn jemand die Nummer 1234 hat, kann es keine Nummer 123 geben,
> ebenso nicht die Nummer 12340 (hinten angestellte "0" hat keinen
> Effekt bei einer gültigen Nummer).

rtfm
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

hint: substring(), length()


Frank

Re: Teilstringabfrage

am 07.08.2006 10:35:11 von Thomas Rachel

Andreas Muschkat wrote:

> SELECT id FROM user WHERE telefon LIKE '$telnr%'
>
> findet nur 1, 12, 123 und 1234.
>
> Theoretisch müßte die umgekehrten Werte die anderen finden:
>
> SELECT id FROM user WHERE '$telnr%' LIKE 'telefon%'

nein... aber versuchs mal mit

SELECT id FROM user WHERE telefon LIKE '$telnr%' OR '$telnr' LIKE
CONCAT(telnr,'%')

- wobei ich davon ausgehe, daß $telnr, ordentlich escaped, von der
Applikation bereitgestellt wird.


Thomas
--
Millionen von Irren können nicht fliegen.

Re: Teilstringabfrage

am 08.08.2006 10:28:12 von Andreas Muschkat

On Mon, 07 Aug 2006 10:29:07 +0200, Frank Schenk
wrote:

>rtfm

Ich kann schon ein wenig SQL und das Manual, aber es fehlen die
Feinheiten und die Ideen, wie ich was lösen kann.

>http://dev.mysql.com/doc/refman/5.1/en/string-functions.htm l
>
>hint: substring(), length()

Ist auch ein interessanter Ansatz...

Andreas

Re: Teilstringabfrage

am 08.08.2006 10:31:49 von Andreas Muschkat

On Mon, 07 Aug 2006 10:35:11 +0200, Thomas Rachel
wrote:

>> Theoretisch müßte die umgekehrten Werte die anderen finden:
>>
>> SELECT id FROM user WHERE '$telnr%' LIKE 'telefon%'
>
>nein... aber versuchs mal mit
>
>SELECT id FROM user WHERE telefon LIKE '$telnr%' OR '$telnr' LIKE
>CONCAT(telnr,'%')
>
>- wobei ich davon ausgehe, daß $telnr, ordentlich escaped, von der
>Applikation bereitgestellt wird.

Ja, das wird.

Danke, damit hats geklappt. Ich mußte allerdings noch auf leere String
abfragen, weil sonst alle ohne Telefonnummer gefunden werden. Hier
noch mit Vorwahl:

SELECT id FROM `user` WHERE ((telefon LIKE '$telefon%' OR '$telefon'
LIKE CONCAT(telefon,'%')) AND telefon != '') AND ((telefonvor LIKE
'$telefonvor%' OR '$telefonvor' LIKE CONCAT(telefonvor,'%')) AND
telefonvor != '')) AND id != '$id'";


Vielen Dank,
Andreas