【问题标题】:PDO: fetchAll() with duplicate column name on JOINPDO: fetchAll() 在 JOIN 上具有重复的列名
【发布时间】:2013-05-01 20:52:57
【问题描述】:

我的数据库中有多个列名相似的表。

假设表 1、表 2、表 3 有一个名为:“名称”的列。这些不是索引列。它们包含不同且独立的数据。

如果我运行查询连接这 3 个表并 fetchAll() 结果,结果数组中将只有一个“名称”条目,因为 fetchAll() 会覆盖具有相同名称的列。

常规的 MySQL 库可以让您访问这样的结果:

mysql_result($result,0,'TABLE1.name');

如何让 PDO 在列名之前附加表名,例如:TABLE1.name、TABLE2.name 等。

我想避免在我的 SQL 查询中使用别名,因为我有大量的表。我在网上找到的唯一答案使用别名。有没有我们可以提供给 PDO 的参数来做我正在寻找的东西?

【问题讨论】:

  • Afaik,您必须使用 PDO::FETCH_NUM 并使用列号,或者 FETCH_BOUND->bindColumn(),再次使用基于数字的索引。
  • Wrikken:关于我如何做到这一点的更多细节?
  • 它在 PHP 的文档中,尽管 var_dump()-ing ->fetchAll(PDO::FETCH_NUM) 的结果并检查它的输出可能会告诉你足够的使用它。
  • 你也可以使用PDO::FETCH_NAMED

标签: php sql


【解决方案1】:

您可以在SELECT 语句中使用别名而不是直接列名。像这样的:

SELECT
  table1.name AS t1_name,
  table2.name AS t2_name,
  table3.name AS t3_name
-- rest of your query

【讨论】:

  • 请看我上面的问题:“我想避免在我的 SQL 查询中使用别名,因为我有大量的表”-.-
  • 抱歉,没看到 :P 您可以使用 PDO::FETCH_NUM,它返回一个数组,该数组由结果集中返回的列号索引,从第 0 列开始 ,根据manual.
猜你喜欢
  • 2016-02-05
  • 2014-11-23
  • 2016-08-03
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多