РНР и MySQL оптимизация трудов и повторное использование SQL кода
Каждый раз садясь за очередной проект, в котором надо больше чем просто текст на страничку выкидывать, задумываюсь о неудобствах жизни в очередной раз выписывать все длинные соединения и условия.
Каждый раз когда просят внести изменения с ужасом пытаюсь вспомнить почему этот запрос такой и почему он такой.
Вот один из примеров ужаса:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | SELECT name FROM ( SELECT heading. name as name FROM program_head INNER JOIN heading ON program_head.heading_id = heading.id WHERE program_head.tvgrid_id = ".$id." UNION ALL SELECT heading. name FROM head INNER JOIN heading ON head.heading_id = heading.id INNER JOIN tvgrid ON head.program_id = tvgrid.id_program WHERE tvgrid.id = ".$id." ) as program_heads GROUP BY name " ; |
выбрал первый попавшийся относительно сложный запрос из последнего проекта.
Меня постоянно мучает вопрос, репозитария запросов, например:
Было бы комфортно иметь классы запросов и далее использовать их как «виртуальные таблицы», термин из 1С, извините, но более подходящего в голове не нашлось.
1 2 3 4 5 6 7 | $sql_headig_by_program_id = new virtualеtable; $sql_headig_by_program_id ->setquery( "SELECT heading.name as name FROM program_head INNER JOIN heading ON program_head.heading_id = heading.id WHERE program_head.tvgrid_id = :::id) ; |
далее этот класс можно было бы использовать в запросах следующим образом
1 | SELECT * FROM :::sql_headig_by_program_id( $id ) |
Мне кажется что это увеличило бы качество SQL кода, повысило бы возможность повторного его использования, а главное значительно упростило бы дальнейшее развитие проектов.
К сожалению из множества найденных в сети ORMов я такого функционала нигде не нашел. Интересно не нашел потому что плохо искал или приведенный мной функционал не интересен в принципе или данные задачи обычно решают как-то по другому.