РНР и MySQL оптимизация трудов и повторное использование SQL кода
Каждый раз садясь за очередной проект, в котором надо больше чем просто текст на страничку выкидывать, задумываюсь о неудобствах жизни в очередной раз выписывать все длинные соединения и условия.
Каждый раз когда просят внести изменения с ужасом пытаюсь вспомнить почему этот запрос такой и почему он такой.
Вот один из примеров ужаса:
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С, извините, но более подходящего в голове не нашлось.
$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) ;
далее этот класс можно было бы использовать в запросах следующим образом
SELECT * FROM :::sql_headig_by_program_id($id)
Мне кажется что это увеличило бы качество SQL кода, повысило бы возможность повторного его использования, а главное значительно упростило бы дальнейшее развитие проектов.
К сожалению из множества найденных в сети ORMов я такого функционала нигде не нашел. Интересно не нашел потому что плохо искал или приведенный мной функционал не интересен в принципе или данные задачи обычно решают как-то по другому.