[linux] sqlite3 database email adres query

Paul Slootman paul+nospam op wurtel.net
Wo Apr 3 18:55:34 CEST 2019


On Wed 03 Apr 2019, Frans van Berckel wrote:

> > Zo uit m'n hoofd:
> > 
> > SELECT userid || '@' || domain FROM users;
> > 
> > > > is vaak een string concat operator.
> 
> Super dit werkt.
> 
> En met deze aanvullende query, hoe kan ik dan zien wat er in %s zit?
> Dat ik je sql niveau reeds weet dat het werkt.
> 
> SELECT userid || '@' || domain AS email FROM users WHERE email = '%s'

Hmm, weet niet of sqlite dit snapt, maar je kunt doorgaans geen WHERE
gebruiken op iets wat je pas weet nadat de query is uitgevoerd.

Dus je moet of eerst (buiten sqlite om) user en domain splitsen en die
los opzoeken met "WHERE userid = 'abc' AND domain = 'example.com'"; of
HAVING gebruiken (als sqlite dit ondersteunt, mysql b.v. wel):

SELECT userid || '@' || domain AS email FROM users HAVING email = '%s';

Maar dan heb je dus al de hele users tabel doorgelopen dus efficient is
dit niet.


Ik heb ook ooit verzonnen dat het vast handig is om email gesplitst op
te slaan (dus naam en domain apart), maar dat leverde alleen maar
programmatische ellende op en een voordeel heb ik nooit ontdekt.
Uiteindelijk dus dat een keer omgegooid naar gewoon 1 email veld.
Als je database normalisatie tot in het extreme wilt doorvoeren dan moet
je alle domains in een apart tabel opslaan en dan alleen het ID bij zo'n
user opslaan... maar soms is het toch sneller en efficienter om zulke
dingen niet te overdrijven.


Paul


Meer informatie over de Linux maillijst