====== Создать вьюшку ======
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW [IF NOT EXISTS] view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
**Где ALGORITHM это алгоритм хранения вьюшки.**
* Для MERGE текст оператора, который ссылается на представление, и определение представления объединяются таким образом, что части определения представления заменяют соответствующие части оператора.
* Для TEMPTABLE результаты представления извлекаются во временную таблицу, которая затем используется для выполнения инструкции.
* Для UNDEFINED MySQL выбирает, какой алгоритм использовать. Если возможно, он предпочитает MERGE вместо TEMPTABLE, потому что MERGE обычно более эффективен и потому что представление не может быть обновляемым, если используется временная таблица.
* Если предложение ALGORITHM отсутствует, алгоритм по умолчанию определяется значением флага derived_merge системной переменной optimizer_switch.
**Где DEFINER определяет кто создал вьюшку**
* Где user это имя пользователя
* Где CURRENT_USER текущий пользователь
* Где role это имя роли
* Где CURRENT_ROLE роль текущего пользователя
** Где SQL SECURITY это доступ чтения вьюшки **
* DEFINER читать от definer, позволяет читать вьюшку от имени того кто создал вьюшку, игнорируя права того кто делал SELECT
* INVOKER читать от запускающего, позволяет читать вьюшку с правами того пользователя который делает SELECT
** column_list список колонок выводимых из вьюшки**, необходим для лучшей оптимизации
** WITH * CHECK OPTION**, тип данных, так-же требуется для оптимизации.
CREATE OR REPLACE
ALGORITHM = MERGE
DEFINER = CURRENT_USER
SQL SECURITY INVOKER
VIEW `alchemy_by_days` (`date`,`earth`,`air`,`water`,`fire`,`life`,`shadow`)
AS
SELECT
DATE(FROM_UNIXTIME(ep.`timestamp`)) as `date`,
sum(IF(ep.type = "earth", ep.price, 0)) as `earth`,
sum(IF(ep.type = "air", ep.price, 0)) as `air`,
sum(IF(ep.type = "water", ep.price, 0)) as `water`,
sum(IF(ep.type = "fire", ep.price, 0)) as `fire`,
sum(IF(ep.type = "life", ep.price, 0)) as `life`,
sum(IF(ep.type = "shadow", ep.price, 0)) as `shadow`
FROM `etheral-prices` ep
GROUP BY ep.`timestamp`
ORDER BY ep.`timestamp` DESC;