РНР и MySQL оптимизация трудов и повторное использование SQL кода

29 Сен
2011

Каждый раз садясь за очередной проект, в котором надо больше чем просто текст на страничку выкидывать, задумываюсь о неудобствах жизни в очередной раз выписывать все длинные соединения и условия. Каждый раз когда просят внести изменения с ужасом пытаюсь вспомнить почему этот запрос такой и почему он такой. Вот один из примеров ужаса:
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ов я такого функционала нигде не нашел. Интересно не нашел потому что плохо искал или приведенный мной функционал не интересен в принципе или данные задачи обычно решают как-то по другому.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх