Написание нескольких функций для выборки данных или одной, как правильно?

Выбираю связанные данные из 4 таблиц, и задался вопросом: как правильно организовать функции для выборки данных? Много думал над этим, но во всех вариантах всплывают какие то нюансы:

Пример:

есть таблица А -> поля id, name, status_activity,
есть таблица Б -> поля id, id_таблицыА, prop1, prop2,
есть таблица C -> поля id, id_таблицыА, data,
есть таблица D -> поля id, id_таблицыА, data,

Хочу написать функцию которая внутри будет содержать SELECT на выборку данных.

Вот тут то у меня и загвоздка... можно написать 4 функции в каждой по SELECT и принимать они будут параметр: массив с id из таблицы А, чтобы подставить в условие IN. Такой способ не травится тем, что нужно писать целых 4 функции и плодить их + 4 запроса.

Еще вариант: написать одну функцию, и внутри через JOIN склеить эти 4 таблицы, а в параметры по прежнему передавать массив с id из таблицы А, чтобы подставить в условие IN. Но тут есть опять заморочка: к примеру если функцию будет называться getFullDataById(array[1,2,3]), то тогда как делать фильтр по данным, не писать же кучу функций и не называть же их ByName ByStatus и тд.

Самое адекватное решение приходящее в голову, это вторым параметром передавать в функцию массив с параметрами, ключем будет поле в бд, а значением, значение в бд, к примеру status => 1, далее клеить это в WHERE и получаем универсальную функцию с 1 запросом на выборку всех данных. Что здесь не нравится: придется перед каждым вызовом этой функции писать массив конфиг, что выбирать, ну или в параметрах значение по умолчанию вставлять пустой массив.

Как писать такие функции для работы с бд правильно, дабы не плодить функции, не плодить запросы к бд, и остаться гибким в формировании выборки? Благодарю!


Ответы (0 шт):