Pull to refresh

Comments 30

Если на собеседовании телемастера он оказывается радиоинженером - точно надо брать: раз может создать схему - то и телевизор починит.

Ну если по правде, то это не совсем SQL. Даже в методе Pl/SQL в коде есть "NO SQL" :)

Задачи интересные, только вот это не статья, а просто список ваших SQL-запросов. Было бы неплохо разделить решения на несколько подэтапов, объяснить как пришли к решению.

Как скучно я живу... Изучаю понемногу react и golang, не знаю чё бы такое поделать чтобы интересно было.

Игру?

Я вот делаю игры как хобби, ни разу не скучно. Уже много лет :)

Зависит от ваших увлечений. Ну и чтобы бэкэнд был сложнее таблицы рекордов.

Я уже много лет делаю свою игру, лютую смесь Героев, Травиана, Кингс Баунти (оригинальных), Стронгхолд, и ряда других игр. Вроде как-то получается, правда, без настоящего мультиплеера, только с общими ивентами. Фронт на JS, бэк на Питоне.

если пишешь
Моё решение здесь и далее на MySQL 8.0:

то используй последние версии...., а использование SET @n = 20; с оконными функциями вообще не дело. Писать статью с deprecated операторами, и ни слова об этом - не красиво.

с оконными функциями вообще не дело

Почему? Потому-что это работает медленнее, чем могло было быть? Возможно да. Возможно, есть способ сделать это быстрее... на несколько миллисекунд. Здесь же не стоит задачи нарисовать 1 млн сердечек в ограниченное количество времени. А нарисовать одну фигуру, неважно как.

Писать статью с deprecated операторами, и ни слова об этом - не красиво.

Рано или поздно, всё будет deprecated :)

таким образом можно почувствовать себя творцом, будучи простым дата-аналитиком

Тот случай, когда имея базу данных, можно нарисовать все что угодно. Буквально.

Ждем статью о том как рисковать с помощью SQL.

Да там статья не нужна...

rm -rf /backup_task /all_backups

А потом просто налаждаться чуством медленно растущей вероятности песца.

Достаточно начать с UPDATE / DELETE и забыть поставить WHERE.

А вообще, про риск с помощью SQL почти каждый DBAшник сможет рассказать много разного :)

drop if exists тоже отличное начало для истории в баре :)

Один раз забыл. А админ взял и исполнил запрос. Хотя, говорит, что-то подозревал. Липкий холодный пот и вот это вот всё... Хорошо бэкапы есть... )

На рисование окружностей есть прекрасный алгоритм Брезенхэма. Я думаю, его было бы тоже интересно воплотить в SQL, используя свойства симметрии окружностей. :)

Класс! Только мне кажется это должно быть и в хабе «Ненормальное программирование». Для окружности лучше больше символом использовать.

Неплохая визуализация к термину "нефиг делать" )

Как-то все очень сложно. Для сравнения, код рисующий шар в sqlite и результат. В pixels координата x делится пополам чтобы немного компенсировать высоту символов, которая больше чем ширина. У меня в консоли без междустрочного интервала вообще отлично выглядит.

WITH RECURSIVE
  counter (i) AS (
    SELECT 0 UNION ALL SELECT i + 1 FROM counter
  ),
  pixels (x, y) AS (
    SELECT i % 60 * 0.5, round(i / 60) FROM counter LIMIT 60*30
  ),
  sdf (x, y, d) AS (
    SELECT x, y, (y-15)*(y-15) + (x-15)*(x-15) FROM pixels
  )
SELECT group_concat(substr('█▓▒░:- ', min(max(d / 30, 1), 7), 1), '')
FROM sdf GROUP BY y;
                       ---------------                      
                  ------:::::::::::::------                 
              -----:::::::░░░░░░░░░:::::::-----             
            ---:::::░░░░░░░░░░░░░░░░░░░░░:::::---           
          ---:::░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░:::---         
        ---:::░░░░▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒░░░░:::---       
      ---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::---     
     ---::░░░░▒▒▒▒▓▓▓▓▓▓█████████████▓▓▓▓▓▓▒▒▒▒░░░░::---    
    ---::░░░▒▒▒▒▓▓▓▓▓███████████████████▓▓▓▓▓▒▒▒▒░░░::---   
   ---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::---  
   --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--  
  --:::░░▒▒▒▒▓▓▓█████████████████████████████▓▓▓▒▒▒▒░░:::-- 
  --::░░░▒▒▒▓▓▓▓█████████████████████████████▓▓▓▓▒▒▒░░░::-- 
  --::░░░▒▒▒▓▓▓███████████████████████████████▓▓▓▒▒▒░░░::-- 
  --::░░░▒▒▒▓▓▓███████████████████████████████▓▓▓▒▒▒░░░::-- 
  --::░░░▒▒▒▓▓▓███████████████████████████████▓▓▓▒▒▒░░░::-- 
  --::░░░▒▒▒▓▓▓▓█████████████████████████████▓▓▓▓▒▒▒░░░::-- 
  --:::░░▒▒▒▒▓▓▓█████████████████████████████▓▓▓▒▒▒▒░░:::-- 
   --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--  
   ---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::---  
    ---::░░░▒▒▒▒▓▓▓▓▓███████████████████▓▓▓▓▓▒▒▒▒░░░::---   
     ---::░░░░▒▒▒▒▓▓▓▓▓▓█████████████▓▓▓▓▓▓▒▒▒▒░░░░::---    
      ---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::---     
        ---:::░░░░▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒░░░░:::---       
          ---:::░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░:::---         
            ---:::::░░░░░░░░░░░░░░░░░░░░░:::::---           
              -----:::::::░░░░░░░░░:::::::-----             
                  ------:::::::::::::------                 
                       ---------------                      

А зачем сложности с WITH RECURSIVE? С generate_series() еще проще всё будет

Функция generate_series это уже расширение. Оно банально недоступно в SQLite Browser, в котором я это тестировал.

Собственно, изначально я хотел сделать в качестве примера ray-marching рендеринг куба, но т.к. математические функции в расширениях, а без них пример уже не будет простым, я остановился на том, что выше.

спасибо за пример! адаптировал под mysql 8:

SET SESSION cte_max_recursion_depth = 10000;
WITH RECURSIVE
  counter (i) AS (
    SELECT 0 UNION ALL SELECT i + 1 FROM counter WHERE i < 1800
  ),
  pixels (x, y) AS (
    SELECT i % 60 * 0.5, TRUNCATE(i / 60, 0) FROM counter LIMIT 1800
  ),
  sdf (x, y, d) AS (
    SELECT x, y, (y-15)*(y-15) + (x-15)*(x-15) FROM pixels
  )
SELECT 
group_concat(substr('█▓▒░:- ', least(greatest(d / 30, 1), 7), 1) SEPARATOR '')
FROM sdf
GROUP BY y;
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                                                                            |
|                                                                                                                                                            |
|                     ---------------------                                                                                                                  |
|                 -----:::::::::::::::::::-----                                                                                                              |
|              ----::::::░░░░░░░░░░░░░░░::::::----                                                                                                           |
|            ---:::::░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░:::::---                                                                                                         |
|          ---::::░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░::::---                                                                                                       |
|         --::::░░░░▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒░░░░::::--                                                                                                      |
|       ---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::---                                                                                                    |
|      ---:::░░░▒▒▒▒▓▓▓▓▓▓▓███████████▓▓▓▓▓▓▓▒▒▒▒░░░:::---                                                                                                   |
|     ---:::░░░▒▒▒▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▒▒▒░░░:::---                                                                                                  |
|     --:::░░░▒▒▒▓▓▓▓▓█████████████████████▓▓▓▓▓▒▒▒░░░:::--                                                                                                  |
|    ---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::---                                                                                                 |
|    --:::░░▒▒▒▒▓▓▓▓█████████████████████████▓▓▓▓▒▒▒▒░░:::--                                                                                                 |
|    --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--                                                                                                 |
|    --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--                                                                                                 |
|    --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--                                                                                                 |
|    --:::░░▒▒▒▒▓▓▓▓█████████████████████████▓▓▓▓▒▒▒▒░░:::--                                                                                                 |
|    ---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::---                                                                                                 |
|     --:::░░░▒▒▒▓▓▓▓▓█████████████████████▓▓▓▓▓▒▒▒░░░:::--                                                                                                  |
|     ---:::░░░▒▒▒▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▒▒▒░░░:::---                                                                                                  |
|      ---:::░░░▒▒▒▒▓▓▓▓▓▓▓███████████▓▓▓▓▓▓▓▒▒▒▒░░░:::---                                                                                                   |
|       ---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::---                                                                                                    |
|         --::::░░░░▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒░░░░::::--                                                                                                      |
|          ---::::░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░::::---                                                                                                       |
|            ---:::::░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░:::::---                                                                                                         |
|              ----::::::░░░░░░░░░░░░░░░::::::----                                                                                                           |
|                 -----:::::::::::::::::::-----                                                                                                              |
|                     ---------------------                                                                                                                  |
|                                                                                                                                                            |
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
30 rows in set (0.02 sec)

вот все-таки тут куча гадких критиканов собралось, мало того что минусуют, да ещё и карму сливают, вот она свобода высказывания. во всей красе, не все , конечно, но большинство, и читать интересного становится всё меньше, как следствие такого затыкания ртов...

я думаю, пора вспоминать былое и переходить к написанию клингтонов звездные войны, бывшая ранее игрушка в текстовом режиме

Задачки это конечно хорошо, но как подобное поможет на реальном проекте? В реальности если встречается чуть замудреная задача, то сразу ищется готовое решение в инете - код со stack overflow, npm пакет и ТД. Да и вообще такими извращениями как рисование SQLем на реальном проекте не занимаются, все равно что gui на питоне писать, или игры на JavaScript

А в статье где-то написано про пользу на реальном проекте? Относитесь к этому как к виду искусства. Тем более что такая практика все равно улучшает навыки владения SQL.

Sign up to leave a comment.

Articles