Предположим, у меня есть две таблицы, группа а также Вещь.
Вещь принадлежать одному группа, это может иметь много предметов.
Предполагая, что шаблон MVC и что каждая таблица имеет свой класс модели с CRUD-методами, написанными на PHP, какова лучшая практика для построения соединения между Вещь а также группа?
Построить SELECT
заявление в группа чтобы получить удостоверение личности группа а затем построить простой SELECT
заявление, используя полученный идентификатор?
/* Select by name in database and returns group object with id and name */
$group = new Group();
$group->setName('somename');
$group->selectByname();
$item = new Group();
/* Sets Group object inside Item */
$item->setGroup($group);
/* Select statement without join, only comparing id */
/* SELECT FROM Item WHERE group_id = $group->id */
$item->selectByGroup();
…или создать JOIN непосредственно на классе Item?
/* Sets the name, returning only the name in the Group object */
$group = new Group();
$group->setName('somename');
/* Build the JOIN inside Item class */
$item = new Item();
$item->setGroup($group);
/* Select statetment with join */
/* SELECT it.*, gr.* FROM item it INNER JOIN group gr
ON it.group_id = gr.id
WHERE gr.name = $group->name
*/
$item->selectByGroupWithJoin();
Некоторые части кода я просто пропустил или упростил, чтобы объяснить мои сомнения.
Так что такое рекомендуемая / лучшая практика? Если не один из них, то какой другой? Благодарю.
Если я правильно понимаю, в первом случае вам нужно выполнить два запроса, а во втором — только один, поэтому я бы точно выбрал второй.
В любом случае вы всегда можете использовать EXPLAIN получить оценку того, насколько «тяжелым» является ваш запрос и где у вас есть место для оптимизации / улучшения.
Других решений пока нет …