Autor Zpráva
Prochy
Profil
Zdravim,

chci se zeptat, mám v databázi telefonní čísla, česká jsou bez předvolby, ostatní s předvolbou. A já potřebuji, když budu mít číslo např. +420666666666, tak aby mi to našlo v DB, kde je jen 666666666. Ale bohužel mě vůbec nic nenapadá.

Myslel jsem něco takového SELECT * FROM message_archive WHERE '+420666666666' LIKE phone_number

A před to phone_number dát nějakou masku, že se tam může i objevit + nějaký čísla. V jiném případě to udělám, až následně v php přes strstr.

Děkuji za odpověď.
Sir Tom
Profil
Prochy:
Také zdravím, můžeš na urovni php (ještě před dotazem na mysql) číslo, které začíná na +420 upravit tak, aby nezačínalo na +420.

Anebo můžeš udělat hromadný příkaz do mysql (update), aby čísla, která nemají předvolbu, dostaly předvolbu na +420.
Kajman
Profil
Případně si v php vygenerovat něco jako
where phone_number in ('+420666666666','666666666')
Prochy
Profil
Sir Tom:
Pravda, mělo mě to napadnout, že si to mám předupravit, ještě před hledáním, hledal sem v tom složitosti. Díky oběma za rady.
peta
Profil
Neslo by treba tohle?
WHERE '666666666' IN (cislo,'+420'+cislo)
Cili zadane cislo je v poli [sloupec, '+420'+sloupec]
Ja bych to ale opravil do databaze s predvolbou, at to mas jednotne.
Kajman
Profil
peta:
Neslo by treba tohle?

Nešlo.
Joker
Profil
Nebo by měl fungovat dotaz na shodu posledních 9 znaků:

WHERE SUBSTRING(phone_number, -9) = '666666666'
mimochodec
Profil
Ta čísla by měla před vložením do databáze každopádně projít nějakou normalizací, která vyřeší nejen mezinárodní předvolby, ale taky odfiltruje mezery a nečíselné znaky. Nejen proto, že výše uvedené postupy budou zřejmě pomalejší než prosté porovnání WHERE cislo = "666666666", ale třeba i kvůli odhalení duplicit.
Kajman
Profil
Joker:
SUBSTRING(phone_number, -9)

To je moc pomalé (nedá se na to použít index a upravuje to hodnoty ve všech sloupcích).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: