2013-02-27 5 views
1

Пока я задал вопрос, похожий на это раньше, я попытался применить к нему ту же технику, и он просто не работает, как должен, а также ошибки и различные моменты.mysql select issue, multi tables

Я создал sqlfiddle для этого; http://sqlfiddle.com/#!2/b1a29

Я пытаюсь создать функцию выбора, которая вернет animal_id, animal_name, animal_type_name, shelter_name, animal_type_id и location_name.

Я попытался хорошо разбираться в этом со следующим кодом, но, очевидно, что-то не хватает;

$query = $this->db->query('SELECT animal_id, animal_name, animal_type_name, shelter_name, shop_id, location_name 
           FROM animals a 
           INNER JOIN shelter s ON s.shop_id = a.shop_id 
           INNER JOIN location l ON l.location_id = s.location_id 
           INNER JOIN animal_types at ON at.animal_type_id = a.animal_type_id'); 
+0

с использованием внутреннего соединения каждая таблица должна содержать значение coorsponding. Вы уверены, что у всех животных есть приюты, места и типы? – xQbert

+0

Вы были близки: http://sqlfiddle.com/#!2/b1a29/7 – sgeddes

ответ

2

Проблема в том, что вы выбираете имя столбца, которое является неоднозначным или существует на нескольких таблицах. В этом случае это shop_id. Для выполнения запроса также необходимо указать, где столбец shop_id должна исходить от,

SELECT animal_id, animal_name, animal_type_name, 
     shelter_name, s.shop_id, location_name 
FROM animals a 
INNER JOIN shelter s ON s.shop_id = a.shop_id 
INNER JOIN location l ON l.location_id = s.location_id 
INNER JOIN animal_types at ON at.animal_type_id = a.animal_type_id 
+0

Спасибо JW! Быстрый поиск в Google сказал мне, что это произошло потому, что оно было перечислено дважды, но, похоже, этот пример помещает «tablename.collum», поэтому, когда я устал делать shelter.shop_id, он ошибочно. Теперь это имеет смысл, еще раз спасибо! – user1725794

+0

Как ваши таблицы связаны друг с другом? –

+0

@ user1725794 приветствуется ': D' –

0

Когда я запускаю свой код, он генерирует сообщение об ошибке:

Column 'shop_id' in field list is ambiguous: SELECT animal_id, animal_name, animal_type_name, shelter_name, shop_id, location_name FROM animals a INNER JOIN shelter s ON s.shop_id = a.shop_id INNER JOIN location l ON l.location_id = s.location_id INNER JOIN animal_types at ON at.animal_type_id = a.animal_type_id

Из-за ошибки: ваш столбец shop_id относится к нескольким таблицам, поэтому вы должны квалифицировать его с помощью псевдонима таблицы/таблицы.

Изменить запрос к этому:

SELECT animal_id, animal_name, animal_type_name, shelter_name, s.shop_id, location_name 
           FROM animals a 
           INNER JOIN shelter s ON s.shop_id = a.shop_id 
           INNER JOIN location l ON l.location_id = s.location_id 
           INNER JOIN animal_types at ON at.animal_type_id = a.animal_type_id