2010-02-11 3 views
0

Je souhaite obtenir le nombre total d'adresses e-mail valides dans une base de données, mais je souhaite également que le total soit une adresse e-mail unique. Est-ce possible avec mysql seul?Mysql - E-mail unique valide

Répondre

3

Quelque chose comme ça peut-être?

SELECT `email` 
FROM `users` 
WHERE `email` 
REGEXP '[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}' 
GROUP BY `email` 

Regex était de here. Comme le site le fait remarquer, cela peut ne pas correspondre à tous les courriels valides (c'est-à-dire les plus obscurs). La dernière fois que je l'ai regardé, je ne sais pas si quelqu'un avait créé une expression régulière qui correspondrait à toutes les adresses e-mail possibles.

+1

Si vous allez utiliser une expression régulière, pourquoi ne pas utiliser pleinement sur fourni sur la même page? (?: [a-z0-9! # $% & '* +/=?^_ '{|} ~ -] + (?: \. [a-z0-9! # $% &' * +/=?^_ '{|} ~ -] +) * |" (?: [\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21 \ x23- \ x5b \ x5d- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) * ") @ (?: (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0 -9])? \.) + [A-z0-9] (?: [A-z0-9 -] * [a-z0-9])? | \ [(? :(?: 25 [0- 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?: 25 [0-5] | 2 [0 -4] [0-9] | [01]? [0-9] [0-9]? | [A-z0-9 -] * [a-z0-9]: (?: [\ X01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ x5a \ x53- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) +) \]) –

+0

ce n'est toujours pas le plein, le plein est 6300+ caractères longs –

+0

C'est parfait, je n'ai pas vraiment pensé à regex. Merci! – jwzk

1

Vous ne pouvez pas vérifier si un e-mail est valide avec mysql.

Vous pouvez sélectionner tous les e-mail unique avec une sélection distincte:

SELECT DISTINCT `e-mailadress`FROM `table1` //something like this 
1

Si vous voulez que le nombre d'entre eux vous feriez

SELECT COUNT(DISTINCT('EMAIL')) FROM 'TABLE' 
+0

J'ai vraiment besoin de savoir si elles sont valides dans ce cas. – jwzk

+1

vous pouvez utiliser une regexp comme suggéré ci-dessous ... – t00ny