Как получить страну, штат, название города наиболее оптимизированным способом из разных таблиц - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть таблица сотрудников, город и страна. Моя таблица сотрудников хранит идентификатор страны и города. Я хочу, чтобы country_name, state_name, city_name с помощью запроса MySQL в оптимизированной форме.

таблица сотрудников

emp_id  name  email         country  state   city
------- ----   -----         -------  ------  -----
    1    abc  a@gmail.com     1      1       1

таблица стран

country_id    country_name
-----------   -------------
1                India

таблица состояний

state_id  country_id  state_name
--------  ----------  -----------
1            1          Gujarat

стол города

city_id   state_id  city_name
-------    -------   --------
1            1       Ahmedabad

Функция, используемая для извлечения данных

  function select_employee(){
      $sth =  $this->con->prepare("SELECT  * from employees");
      $sth->execute();
      $result = $sth->fetchAll(PDO::FETCH_ASSOC);

      return $result;
  }

Функция для отображения состояния, города, страны

  function select_places(){
          $sth =  $this->con->prepare("SELECT country.country_name,state.state_name,city.city_name
                                                                            FROM employees
                                                                            LEFT JOIN country ON employees.country = country.country_id
                                                                            LEFT JOIN state ON employees.state = state.state_id
                                                                            LEFT JOIN city ON employees.city = city.city_id");
          $sth->execute();
          $result = $sth->fetchAll(PDO::FETCH_ASSOC);
          return $result;
      }

печать данных

<?php
   foreach ($result as $values){
                ?>
        </tr>
        <td><?php echo $values['country']; ?></td>
        <td><?php echo $values['state']; ?></td>
        <td><?php echo $values['city']; ?></td>
     }

В разделе данных печати мне нужны данные Индия, Гуджарат, Ахмедабад. Не их идентификаторы.

выход

country_name  state_name  city_name
------------  --------   ----------
1                1           1

что мне нужно

 emp_id   name    email       country_name   state_name    city_name
   -----   ----   -------      ------------   --------     ----------
    1      abc    ab@gm.com      India         Gujarat      Ahmedabad

как мне подготовить запрос или присоединиться к этому? что, используя идентификатор сотрудника, я получаю имя из таблицы страны, штата, города

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

Функция

 function select_employee(){
      $select = "SELECT * from employees";
      $select .= " join country on employees.country_id = country.country_id";
      $select .= " join state on employees.state_id = state.state_id";
      $select .= " join city on employees.city_id = city.city_id";
      $sth =  $this->con->prepare($select);
      $sth->execute();
      $result = $sth->fetchAll(PDO::FETCH_ASSOC);

      return $result;
  }

Печать

<?php foreach ($result as $values): ?>
    <tr>
        <td><?php echo $values['country_name']; ?></td>
        <td><?php echo $values['state_name']; ?></td>
        <td><?php echo $values['city_name']; ?></td>
    </tr>
<?php endforeach;?>
1 голос
/ 16 апреля 2019

Изменить $sth = $this->con->prepare("SELECT * from employees"); на

$sth =  $this->con->prepare("      
SELECT employees.* country_table.country_name, state_table.state_name, city_table.city_name FROM 
   (((employees INNER JOIN country_table ON employees.country_id = country_table.country_id)
   INNER JOIN state_table ON employees.state_id = state_table.state_id)
   INNER JOIN city_table ON employees.city_id = city_table.city_id)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...