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

28 сентября 2011 г.

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

Вот один из примеров ужаса:

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

Теги:
рубрика PHP
  • Похожие статьи
  • Предыдущие из рубрики