Substring magic with mysql

Mysql is a wonderful database, and while many use it, most people only scratch the surface of what the database can do. One of the practical functions available is the substring_index function, and an imaginary mailing list example is a nice way to show how to use it.

Let imagine we have a mailinglist in a table named “mailinglist” and it has a (char) column with the email addresses subscribed to the list. We now want to figure out how many users, that are subscribed from the various domains in the list.

Finding the domain name from an email address is quite simple - just find the @ sign - anything past that, will be the domain name and substring_index will do just that. To create our list of domains with the number of subscribers, we simply issue this query:

SELECT SUBSTRING_INDEX(email, '@', -1) AS domain, count(\*) as subscribed
FROM mailinglist
GROUP BY domain
ORDER BY subscribed;

Some email providers may use 3rd level domains (sales.example.com, tech.example.com, etc). What it we want to summarize the subscribers on the second level (example.com). No worries - substring_index will help us with that too. The query to do that looks like this:

SELECT  SUBSTRING\_INDEX(SUBSTRING\_INDEX(email, '.', -2),'@',-1) AS domain,
count(SUBSTRING\_INDEX(SUBSTRING\_INDEX(email, '.', -2),'@',-1)) AS subscribed
FROM  mailinglist
GROUP BY domain
ORDER BY subscribed;

While most developers may master simple queries in SQL, most databases have a library of functions - like substring_index - available and must too often they are ignored and hardly used at all.

If you want to be a better developer, learn to use the entire toolbox available - not just what you know already in Perl, in PHP or what ever you use to do your programming.