Название страны, штата и города отображает правильное из первой таблицы, но также отображает те же сведения из второй таблицы

#php #mysql #codeigniter-3

#php #mysql #codeigniter-3

Вопрос:

У меня есть таблицы и столбцы tbl_customer, shipping, countries, state и city, которые

tbl_customer

 cust_id | Name  | Email         |b_address  | b_country | b_State | b_city 
1       | zxxzc | zxz@gmail.com |asdasasdsa | 231       | 3936    | 45645
2       | ergtf | okh@gmail.com |hghggjhghg | 231       | 3948    | 45497
3       | oiuyt | ert@gmail.com |mkjhgfdddd | 231       | 3927    | 43472
  

Доставка

 s_id | s_address  | s_country | s_State | s_city | cust_id
1    | asdasasdsa | 231       | 3934    | 44173  | 1
2    | oiuytrjhhg | 13        | 273     | 6815   | 3
  

Теперь я должен извлечь название страны, штата и города из обеих таблиц.
Итак, я попробовал объединения, подобные

 $this->db->select("*")
$this->db->from('tbl_customer');
$this->db->join('shipping', 'tbl_customer.cust_id=shipping.cust_id', 'LEFT');
$this->db->join('countries', 'countries.id=tbl_customer.b_country OR countries.id=shipping.s_country'); 
$this->db->join('states', 'states.id=tbl_customer.b_State OR states.id=shipping.s_State'); 
$this->db->join('city', 'city.id=tbl_customer.b_city OR city.id=shipping.s_city'); 

 $query = $this->db->get();
 $result = $query->result();
if($result)
      {
        return $resu<
      }
       else 
      {
        return 0;
       }
  

Контроллер

 $list_1=$this->Reports_model->get_details(); 
foreach($list_1 as $row)
  {
/*customer table*/
$countryname=$row->country_name;
$state_name=$row->state_name;
$cities_name=$row->cities_name;

/*shipping table*/
$countryname_s=$row->country_name;
$state_name_s=$row->state_name;
$cities_name_s=$row->cities_name;

}
  

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

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

Ответ №1:

Названия столбцов в таблицах отгрузки и клиентов разные.

  foreach($list_1 as $row)
  {
/*customer table*/
$countryname=$row->b_country;
$state_name=$row->b_state;
$cities_name=$row->b_city;

/*shipping table*/
$countryname_s=$row->s_country;
$state_name_s=$row->s_state;
$cities_name_s=$row->s_city;

}
  

Чтобы отобразить название страны, штата и города, ваш запрос select должен быть примерно таким, как показано ниже.

 $this->db->select("c.*, c1.name as country_name, c2.name as shipping_country, s1.name as state_name, s2.name as shipping_state, ci1.name as city_name, ci2.name as shipping_city")
$this->db->from('tbl_customer c');
$this->db->join('shipping s', 'c.cust_id=s.cust_id', 'LEFT');
$this->db->join('countries c1', 'c1.id=c.b_country'); 
$this->db->join('countries c2', 'c2.id=s.s_country'); 
$this->db->join('states s1', 's1.id=c.b_State'); 
$this->db->join('states s2', 's2.id=s.s_State'); 
$this->db->join('city ci1', 'ci1.id=c.b_city'); 
$this->db->join('city ci2', 'ci2.id=s.s_city'); 
  

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

1. Да, названия столбцов отличаются, но в названии столбца будет отображаться единственное число. Я должен отобразить название страны, идентификатор которой равен 231.

2. Позвольте мне попробовать ваш ответ, дайте мне немного времени, чтобы проверить