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