2017-10-09 47 views
0

如何输出formulation_name而不是当前输出的id。我已经寻找了一段时间的答案,但没有得到正确的解决方案。如何在mysql中输出名称而不是外键ID?

在表object,formulation_fk列中是表formulationid的外键。这是我的两张桌子。

datatable

我曾与下面的查询输出NameFormulation id远来的部份。但是应该怎么查询才能在表object中显示formulation_name而不是id

<?php 
    require_once 'db_connect.php'; 

    $output = array('data' => array()); 

    $sql = "SELECT * FROM object"; 
    $query = $connect->query($sql); 

    while ($row = $query->fetch_assoc()) { 

     $output['data'][] = array(
      $row['name'], 
     ); 
} 

OutputTable

预先感谢您的建议。

+2

编写代码谷歌如何做一个内部连接 – ADyson

+2

你需要学习如何做连接。他们应该包含在任何介绍性的SQL教程中。 – Quentin

回答

1

inner join执行表。在您的图表中,你提到的表是对象,但SQL查询与output。我你提到刚刚与object表从图

"SELECT object.name,formulation.formulation_name as formulation FROM object INNER JOIN formulation ON object.formulation_fk = formulation.id" 
+0

非常感谢。这是我的形象中的一个错字。但你的解决方案完美运作。我非常感谢帮助。 – Ashonko

0

使用JOIN

$sql = "SELECT * FROM object INNER JOIN formulation ON object.formulation_fk = formulation.id"; 

BTW:更好的结构应该是:

Object: object_id, object_name, formulation_id 
Formulation: formulation_id, formulation_name 

你将避免名称的歧义。

+0

感谢您对结构的建议,但我很抱歉查询返回错误。 – Ashonko

+2

@RajibBiswas这是因为答案是建议你先改变你的表名(因此这个词“结构”)。恕我直言,这只是一个命名约定的问题,但这里建议的更常见的是您的命名(即将_id放在末尾,以便与主键字段相匹配,而不是最后的_fk_)。但这只是一个意见问题。 – ADyson

+0

当主键和外键具有相同的名称时,可以使用'LEFT JOIN table USING(key_name)' – bato3

相关问题