Есть две таблицы связанные по двум колонкам
в одной таблице (monitoring_companies) есть колонки
обе эти колонки имеют идентификаторы стран , названия которых c_name хранятся в другой таблице countries
таблица countries имеет две колонки
Мне нужно получить массив с названиями стран покупателей и производителей
Использую конструктор запросов фреймверка codeigniter
Запрос выглядит следущим образом
$this->db->select('mc_id')
->group_start()
->select('c_name AS name')->from('countries')->where('countries.c_id = monitoring_companies.c_id')
->group_end()
->or_group_start()
->select('c_name')->from('countries')->where('countries.c_id = monitoring_companies.generator_c_id')
->group_end()
->from('monitoring_companies');
$getresult = $this->db->get()->result_array();
выдает ошибку.
Not unique table/alias: 'countries'
Выходит, мне нужно задать псевдоним таблице 'countries'
Задаю псевдоним:
$this->db->select('mc_id')
->group_start()
->select('c_name AS name')->from('countries')->where('countries.c_id = monitoring_companies.c_id')
->group_end()
->or_group_start()
->select('c_name')->from('countries AS cscsdc')->where('cscsdc.c_id = monitoring_companies.generator_c_id')
->group_end()
->from('monitoring_companies');
тогда выдает ошибку
Column 'c_name' in field list is ambiguous
Если напишу просто вот так:
$this->db->select('monitoring_companies.mc_id')
->group_start()
->select('c_name AS name')->from('countries')->where('countries.c_id = monitoring_companies.c_id')
->group_end()
->from('monitoring_companies');
то получаю массив, но как видно в массиве хранится всего одна страна связанная по id покупателя
Array
(
[0] => Array
(
[mc_id] => 1
[name] => Коморские острова
)
[1] => Array
(
[mc_id] => 2
[name] => Бангладеш
)
[2] => Array
(
[mc_id] => 3
[name] => Коста Рико
)
[3] => Array
(
[mc_id] => 4
[name] => Конго
)
[4] => Array
(
[mc_id] => 7
[name] => Коморские острова
)
[5] => Array
(
[mc_id] => 23
[name] => Россия
)
)
еще попробовал такой вариант
$this->db->select('monitoring_companies.mc_id')
->group_start()
->select('buy.c_name AS name')->from('countries AS buy')->where('buy.c_id = monitoring_companies.c_id')
->group_end()
->or_group_start()
->select('gen.c_name')->from('countries AS gen')->where('gen.c_id = monitoring_companies.generator_c_id')
->group_end()
->from('monitoring_companies');
получил огромный массив с более чем 1000 элементами.
хотя в таблице monitoring_companies их 6...
перепробовал десятки вариантов, но как получить массив в котором будут храниться обе страны так и не понял...(((
Сообщение об ошибке означает следующее: есть как минимум 2 разные колонки (в разных таблицах) или 2 разные таблицы с таким именем, и сервер не знает, какую из них использовать.
Добавьте обеим копиям таблиц разные алиасы (это Вы сделали, но только для одной из таблиц - сделайте так для обеих, но с разными алиасами), и укажите эти алиасы в именах используемых полей (колонок). Т.е. не c_name
, а, скажем, cscsdc.c_name
.
PS. Рекомендация - как только количество таблиц в запросах становится более 1 (неважно, одна и та же или разные) - всем таблицам присваивайте алиасы. и всем полям указывайте алиасы таблиц. Серверу всё равно, а от подобных ошибок уберегает.
PPS. Почему так сложно? попробуйте по-простому
$this->db->select('m.mc_id, c1.c_name as name1, c2.c_name as name2')
->from('monitoring_companies as m')
->join('countries as c1', 'm.c_id = c1.c_id')
->join('countries as c2', 'm.generator_c_id = c2.c_id');
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
К примеру, у меня на сайте есть хедер и какая-то контентная частьКак сделать так ,чтобы при изменении расширения экрана, и хэдэр и контент...