Получение обоих идентификаторов из внутреннего соединения

#php #mysql #codeigniter #join

#php #mysql #codeigniter #Присоединиться

Вопрос:

Я работаю над веб-сайтом в php Codeigniter framework, и у меня возникают проблемы с объединением таблиц вместе.

Две таблицы — это блюда и рестораны, просто с версиями

 meals: id, restaurant_id, price, etc.

restaurants: id, name, location, etc.
  

Для выполнения запроса я использую следующий код:

 $this->db->join('restaurants', 'restaurants.id = meals.restaurant_id');
$query = $this->db->get('meals');
  

который возвращает тот же результат, что и при запуске этого:

 $query = $this->db->query('SELECT * FROM meals INNER JOIN restaurants ON restaurants.id = meals.restaurant_id'); 
  

Проблема в том, что когда я получаю доступ к результату в виде php-массива or и объекта (как предоставляется классом codeigniter DB), возвращается только один идентификатор, идентификатор ресторана, и мне нужен идентификатор блюда. Как я могу заставить его выдавать идентификатор приема пищи?

Ответ №1:

Я не знаком с вашими текущими инструментами (php / codeigniter / и т.д.), И я предполагаю, что проблема возникает из-за того, что обе таблицы имеют одинаковое имя для столбца «id»? (Обычно это не проблема… но, возможно, инструменты не справляются с этим правильно?) Что касается SQL-запроса, один из способов различать столбцы с одинаковыми именами — использовать псевдонимы в инструкции select . Вот пример:

 select
    m.id as meal_id,
    m.price as meal_price,
    r.id as restaurant_id,
    r.name as restaurant_name,
    r.location as restaurant_location
from meals as m
inner join restaurants as r on r.id = m.restaurant_id
  

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

1. Спасибо за это. Оказывается, у кого-то была точно такая же проблема с тем же решением: ссылка

Ответ №2:

попробуйте это

 SELECT t1.id as mid,t2.id as rid
  FROM table_meals as t1
  inner JOIN table_restaurant as t2 ON t2.id = t1.`restaurant_id`