Как сделать внутренний выбор внутри запросов pdo?

0

Я не уверен, как правильно назвать вопрос, и поскольку у меня не было лучшего заголовка, мне не удалось найти много вопросов по той же проблеме, о которой можно было бы спросить раньше.

В моей базе данных есть отношение "один-много", данные распространяются по нескольким таблицам.

public function get_recipe_data($id){
    $sth = $this->db->prepare('SELECT * FROM
                               recipe as recipe
                               LEFT JOIN recipe_introduction as introduction
                               ON recipe.id = introduction.recipe_id
                               LEFT JOIN recipe_ingredients as ingredients
                               ON recipe.id = ingredients.recipe_id
                               LEFT JOIN recipe_ingredients_notes as notes
                               ON recipe.id = notes.recipe_id
                               LEFT JOIN recipe_macros as macros
                               ON recipe.id = macros.recipe_id
                               WHERE recipe.id = :id
    ');
    $sth->bindValue(':id', $id, PDO::PARAM_INT);
    $sth->execute();

    return $sth->fetch(PDO::FETCH_ASSOC);
}

public function convertCategoryId($category_id){
    $sth = $this->db->prepare('SELECT name FROM recipe_categories WHERE id = :category_id');
    $sth->bindValue(':category_id', $category_id, PDO::PARAM_INT);
    $sth->execute();

    return $sth->fetch(PDO::FETCH_ASSOC);
}

В таблице рецептов есть столбец, который имеет идентификатор для названия категории и относится к другой таблице.

таблица рецептов

+----+-------+-------------+
| id | title | category_id |
+--------------------------+
| 1  |  ...  |      1      |
+----+-------+-------------+
| 2  |  ...  |      3      |
+----+-------+-------------+

У меня есть эта другая таблица

recipe_categories

+----+------------+
| id |    name    |
+----+------------+
| 1  |  breakfast |
+----+------------+
| 2  |    lunch   |
+----+------------+
| 3  |   dinner   |
+----+------------+
| .. |    ...     |
+----+------------+

Прямо сейчас мне нужно вернуть результаты из первого запроса выше, а затем, как только я это сделаю, я запустил другой метод в классе, передав category_id из первого запроса, а затем сопоставил его с recipe_categories, но это настолько неэффективно,

Есть ли способ, чтобы я мог выбрать имя прямо из первого запроса?

Теги:
pdo

1 ответ

0
Лучший ответ

Просто присоединитесь к таблице категорий в таблице рецептов, это даст вам доступ к имени категории в одном запросе.

SELECT
      *
FROM recipe AS recipe
INNER JOIN recipe_categories AS rcat ON recipe.category_id = rcat.id
LEFT JOIN recipe_introduction AS introduction ON recipe.id = introduction.recipe_id
LEFT JOIN recipe_ingredients AS ingredients ON recipe.id = ingredients.recipe_id
LEFT JOIN recipe_ingredients_notes AS notes ON recipe.id = notes.recipe_id
LEFT JOIN recipe_macros AS macros ON recipe.id = macros.recipe_id
WHERE recipe.id = id

Заметка. Несмотря на то, что среди пользователей PHP распространена практика использования "select *", наилучшей практикой является то, что вы должны указать каждый столбец, который вы хотите вернуть, и не оставлять его на волю случая.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню