如何从 CodeIgniter 中具有相同列名的表中输出数据?

Posted

技术标签:

【中文标题】如何从 CodeIgniter 中具有相同列名的表中输出数据?【英文标题】:How to output data from tables with same column names in CodeIgniter? 【发布时间】:2010-09-16 06:33:27 【问题描述】:

这是我的查询:

$query = $this->db->query('
    SELECT archives.id, archives.signature, type_of_source.description, media_type.description, origin.description 
    FROM archives, type_of_source, media_type, origin                                                             
    WHERE archives.type_of_source_id = type_of_source.id                                                          
    AND type_of_source.media_type_id = media_type.id                                                              
    AND archives.origin_id = origin.id                                                                            
    ORDER BY archives.id ASC
');

但是如何输出结果呢?这有效,但只获取最后的描述(origin.description):

foreach ($query->result_array() as $row)

    echo $row['description'];

这不起作用:

foreach ($query->result_array() as $row)

    echo $row['type_of_source.description'];

或者我应该重命名列(例如 type_of_source_description)?

【问题讨论】:

【参考方案1】:

这实际上与 CodeIgniter 关系不大,而与 mysql_fetch_assoc 提供查询结果的方式有很大关系。

解决方案是您应该使用"AS" 重命名查询中的列,例如

select type_of_source.description as type_of_source_description, origin.descripotion as origin_descripotion from ....

【讨论】:

用postgres,还是一样吗? 我看不出它为什么不应该这样,“AS”是标准 SQL 语法,我敢打赌 php 的 pg_* 函数的工作方式与 mysql_* 非常相似。【参考方案2】:

只需为 SELECT 语句中的列设置别名。不要修改您的数据库。标准做法是在 SQL 语句中使用别名。

来自 PostgreSQL 的 "SELECT" 文档:

“使用子句 AS output_name,可以为输出列指定另一个名称。”

PostgreSQL SELECT

【讨论】:

在我的情况下,我有很多没有 AS 的查询,重命名所有的都是非常痛苦的。有什么办法吗?【参考方案3】:

我建议不要这样使用它,您可以使用AS 重命名输出列。

【讨论】:

以上是关于如何从 CodeIgniter 中具有相同列名的表中输出数据?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中具有相同列名的表之间的数据复制

使用 SQL 和 Sqlalchemy 查询的表具有相同的列名

从具有特定值的表中获取列名

使用 PHP/CodeIgniter 从具有多对多关系的两个表中显示数据

JOOQ 连接两个具有相同列名的表

内连接2个具有相同列名的表