MySQL: Boolean Substitution

| Comments

Today I faced a quite interesting problem, that originated from pure laziness. I’m developing a backend system for a quite complex database structure. Within this backend, an almost limitless amount of table views have to be created for the end user. Because I’m extremely lazy, and didn’t want to develop the html view code for each table view, I created a PHP html-table-generator-class, which takes a mysql_result_set as parameter, and outputs the html table in string format.

This method works great, unless for some cases, where a value in the query has to be substituted by a user readable value. A boolean is a good example of such a value.

Booleans in MySQL

Since MySQL doesn’t natively support boolean values, there are various methods of saving booleans to a database. Common practices include fields of the format CHAR(1), TINYINT(1) and ENUM('Y','N'). Recent versions of MySQL also include the BIT field format, which in fact boils down to using TINYINT(1), when it comes to boolean values.

I always use the TINYINT(1) field format for my boolean columns. This works perfectly, since you can INSERT true/false values, which are automatically transformed to 1/0. When you SELECT a boolean column in PHP, this also works, since you can compare true/false to 1/0 within PHP. (Whether this loose type handling is preferable is a discussion for another time).

However.. when you SELECT a boolean column, and run it through a generic html table generator class such as mine, you’ll end up with a nice table showing 1’s and 0’s, which aren’t very user friendly (Having in mind that most backend users aren’t quite as computer savvy as you are!). Replacing all 1’s and 0’s within the PHP code was not an option, since it would be a generic measure, and would also transform ID’s and Prices and such. So I had to come up with a solution to substitute the boolean values within the MySQL result by human readable values.

Substituting boolean values within a MySQL SELECT query

The solution is in fact, as they usually are, quite simple. MySQL supports the use of the REPLACE() SQL command. Usually this command is used to UPDATE tables with replacement values, but it also works within a SELECT query to alter results. Having this in mind I started out replacing one value in the result:

SELECT REPLACE(boolColumn,'1','true') AS booleanValue FROM tableName;

This works! There’s a slight catch though, since ‘false’ values also have to be substituted. After some fiddling with IF and AND constructions, the solutions was of course a lot easier:

SELECT REPLACE(REPLACE(boolColumn,'0','false'),'1','true') AS booleanValue FROM tableName;

And there you have it.. value substitution 101 in MySQL. This method also works for your other substitution needs!