php函数以获取数据,将具有通用字段名称的多个表连接起来并显示输出[重复]

Posted

技术标签:

【中文标题】php函数以获取数据,将具有通用字段名称的多个表连接起来并显示输出[重复]【英文标题】:php function to fetch data joining multiple tables with common field names and displaying output [duplicate] 【发布时间】:2021-08-09 22:04:05 【问题描述】:

我有一个 php 函数来获取用户数据,但连接的表共享常见的字段名称,如 idname 等。我在这里使用 SELECT *。如何显示数据。

function userData()
  global $pdo;

  $stmt = $pdo->prepare("SELECT * FROM users
                         LEFT JOIN cities ON users.city = cities.id
                         LEFT JOIN states ON cities.state_id = states.id
                         LEFT JOIN countries ON states.country_id = countries.id
                         WHERE users.id = :id");
  $stmt-> bindValue(':id', sessionUser());
  $stmt-> execute();
  return $stmt->fetch();

$user = userData();

我想要类似的东西:

$user['cities.name']
$user['states.name']

但这不起作用。怎么办?

【问题讨论】:

列别名是唯一的方法。无论如何,您应该尽可能避免使用SELECT *;这只是进一步的激励! 你可以试试PDO::FETCH_NAMED @NigelRen 我以前没听说过,谢谢! (我也赞成 YCS 最近对链接副本的回答。) 如果您不想为字段设置别名,我认为唯一的选择是使用通过 PDO::FETCH_BOTH 获得的序数值或尝试按列对值分组的 PDO::FETCH_NAMED姓名。无论哪种方式,您都将引用一个索引,即$user[0]$user['name'][0] @NigelRen 和 cOle2 如果你的答案是我会接受的。谢谢你们俩。那完成了任务。 :) 【参考方案1】:

您需要为您的 SQL 列提供别名。

SELECT
 `cities`.`name` as 'cities.name',
 `states`.`name` as 'states.name',
 (etc)

否则(我相信)PHP 会误解并覆盖键(列名)相同的值。

【讨论】:

这是一种常规的方法,而且有很多字段。我不能去命名他们每一个。我需要一个通用的解决方案。 我认为没有一种(直截了当的)方法可以实现您想要的。我和你有同样的问题,我写了一个复杂的自定义类来提取所有列名(带别名)。这是 PHP 和 mysql 的限制之一。【参考方案2】:

您需要添加要返回的字段,即

$stmt = $pdo->prepare("SELECT * FROM users,
                         cities.name as cityName
                         states.name as stateName
                         LEFT JOIN cities ON users.city = cities.id
                         LEFT JOIN states ON cities.state_id = states.id
                         LEFT JOIN countries ON states.country_id = countries.id
                         WHERE users.id = :id");

然后使用:

$user['cityName']
$user['stateName']

【讨论】:

这是一种常规的方法,而且有很多字段。我不能去命名他们每一个。我需要一个通用的解决方案。 除非您在 select 语句中包含这些字段,否则它们不会被返回。

以上是关于php函数以获取数据,将具有通用字段名称的多个表连接起来并显示输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

What Joins 用于将多个表连接到一个视图中

如何查询多个表以获取表具有相同列名的记录

Jolt 将多个对象转换为具有新字段名称的数组

PHP 获取具有确定类型的内容的名称字段的数组

php mysql加入带有字段名的子数组

mongodb多个匹配条件并返回具有通用名称的文档