Whilst working a fairly tricky bug involving the powerful GROUP_CONCAT function of MySQL, I also played with the CONCAT function and though a bit grass root, I managed to build a quick bar chart directly in MySQL.
Here is a quick example of what you can do.
First we need a test table:
CREATE TABLE `source_data` (
`id` int(11) NOT NULL auto_increment,
`name_of_variable` varchar(10) NOT NULL,
`var_value` decimal(10,0) NOT NULL,
`period` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Then some test data:
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '1', '0', '2009-01-01');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '2', '0', '2009-01-07');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '12', '0', '2009-02-01');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '5', '0', '2009-02-06');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '6', '0', '2009-03-01');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '11', '0', '2009-03-10');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '3', '0', '2009-03-23');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '6', '0', '2009-04-01');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '21', '0', '2009-05-01');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '10', '0', '2009-05-21');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '1', '0', '2009-06-29');
insert into `source_data` ( `name_of_variable`, `var_value`, `id`, `period`) values ( 'sales', '7', '0', '2009-06-30');
And now we make a basic bar chart, directly in MySQL console:
SELECT
date_format(period, '%Y-%m') as monthly_period,
name_of_variable as 'metric',
CONCAT(REPEAT('*', var_value)) as 'bar chart'
FROM
source_data
GROUP BY
name_of_variable ,
date_format(period, '%Y-%m')
ORDER BY
period;
And the result is :
+----------------+--------+-----------------------+
| monthly_period | metric | bar chart |
+----------------+--------+-----------------------+
| 2009-01 | sales | * |
| 2009-02 | sales | ************ |
| 2009-03 | sales | ****** |
| 2009-04 | sales | ****** |
| 2009-05 | sales | ********************* |
| 2009-06 | sales | * |
+----------------+--------+-----------------------+
6 rows in set (0.01 sec)
Et voila, you can have some fun with MySQL console... sort of !