如何从不同的表中以最优化的方式获取国家、州、城市名称

Posted

技术标签:

【中文标题】如何从不同的表中以最优化的方式获取国家、州、城市名称【英文标题】:How to get country,state,city name in the most optimized way from different tables 【发布时间】:2019-09-06 13:18:06 【问题描述】:

我有一张员工表、城市国家和州表。 我的员工表存储国家和城市的 id。 我想要以优化形式使用 mysqli 查询的 country_name、state_name、city_name。

员工表

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

我该如何准备查询或加入呢?使用员工的 id 我从国家、州、城市表中获取名称

【问题讨论】:

使用JOIN有什么问题? 它给出了城市国家的 id,我需要他们的名字 因为您打印了错误的值。值“状态”将始终是 id。您应该使用 " 代替。 已编辑请立即查看 SQL SELECT from multiple tables的可能重复 【参考方案1】:

功能

 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;?>

【讨论】:

问题已编辑请帮助..我还需要 emp 表中的数据,所以我必须使用第二个函数并进行 select * 查询吗?【参考方案2】:

$sth = $this-&gt;con-&gt;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)");

【讨论】:

您正在使用员工 ID 加入州/国家/城市 ID。这肯定行不通.. ;) 问题已编辑请帮助..我还需要 emp 表中的数据,所以我必须使用第二个函数并进行 select * 查询吗? @DhruvThakkar 我编辑了我的答案,现在你也可以从emplpyee 表中获得所有内容

以上是关于如何从不同的表中以最优化的方式获取国家、州、城市名称的主要内容,如果未能解决你的问题,请参考以下文章

使用地名数据库获取城市所属的州和县?

国家->州->城市的链式下拉菜单

SQL 函数在没有主键的表中列出列

是否有任何 API 用于获取所有国家并通过国家/地区获取所有州/地区并再次通过州/地区获取其中的所有城市

使用php从多个mysql表中获取并显示值

如何从R中的州边界获取纬度和经度数据