Например так:
Идея:
Можно почитать: http://code.openark.org/blog/mysql/rotating-sql-graphs-horizontally
SELECT id,CONCAT(REPEAT('-',(val*10+1)-1),'#',REPEAT('-',22-(val*10+1))) AS bar
FROM sample_values
LIMIT 20
+----+------------------------+
| id | bar |
+----+------------------------+
| 0 | ----------#----------- |
| 1 | -----------#---------- |
| 2 | ------------#--------- |
| 3 | -------------#-------- |
| 4 | --------------#------- |
| 5 | ---------------#------ |
| 6 | ----------------#----- |
| 7 | ----------------#----- |
| 8 | -----------------#---- |
| 9 | ------------------#--- |
| 10 | ------------------#--- |
| 11 | -------------------#-- |
| 12 | -------------------#-- |
| 13 | --------------------#- |
| 14 | --------------------#- |
| 15 | --------------------#- |
| 16 | --------------------#- |
| 17 | --------------------#- |
| 18 | --------------------#- |
| 19 | -------------------#-- |
| 20 | -------------------#-- |
+----+------------------------+
20 rows in set (0.00 sec)
Как видно из примера, для продолжительных графиков( ограничение число отображаемых строк в терминале) хотелось бы иметь более привычный горизонтальный график ( горизонтальная ось - х) - это возможно и строится такой график с помощью техники string unwalking. (пример ниже)
mysql> SELECT * from characters; +---+ | c | +---+ | h | | e | | l | | l | | o | +---+ 5 rows in set (0.00 sec) mysql> SELECT GROUP_CONCAT(c separator '') AS s FROM characters; +-------+ | s | +-------+ | hello | +-------+ 1 row in set (0.00 sec)
Идея:
- задать удобные граничные условия удобные для отображение (фикс. длинна, кол-во строк и т.д.)
- построить строку по методу показанному выше (техника walking-string)
- после построение, осуществить её поворот - транспонирование (техника string unwalking)
SELECT
GROUP_CONCAT(SUBSTRING(bar,tinyint_asc.value,1) ORDER BY id SEPARATOR '') AS `Sinus graph`
FROM
tinyint_asc
INNER JOIN (
SELECT
id,
CONCAT(REPEAT('-',(val*10+1)-1),'#',REPEAT('-',22-(val*10+1))) AS bar
FROM
sample_values
LIMIT 50) sel_graph
WHERE
tinyint_asc.value BETWEEN 1 AND CHAR_LENGTH(bar)
GROUP BY
tinyint_asc.value
ORDER BY
tinyint_asc.value DESC;
+-----------------------------------------------------------------+
| Sinus graph |
+-----------------------------------------------------------------+
| ----------------------------------------------------------------|
| -------------######---------------------------------------------|
| -----------##------###------------------------------------------|
| ---------##-----------#-----------------------------------------|
| --------#--------------##---------------------------------------|
| ------##-----------------#--------------------------------------|
| -----#--------------------#-------------------------------------|
| ----#----------------------#------------------------------------|
| ---#------------------------#-----------------------------------|
| --#--------------------------#----------------------------------|
| -#----------------------------#---------------------------------|
| #------------------------------#-------------------------------#|
| --------------------------------#-----------------------------#-|
| ---------------------------------#---------------------------#--|
| ----------------------------------#-------------------------#---|
| -----------------------------------##----------------------#----|
| -------------------------------------#--------------------#-----|
| --------------------------------------#-----------------##------|
| ---------------------------------------#---------------#--------|
| ----------------------------------------##-----------##---------|
| ------------------------------------------##-------##-----------|
| --------------------------------------------#######-------------|
+-----------------------------------------------------------------+
Можно почитать: http://code.openark.org/blog/mysql/rotating-sql-graphs-horizontally



