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 函数来获取用户数据,但连接的表共享常见的字段名称,如 id
、name
等。我在这里使用 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函数以获取数据,将具有通用字段名称的多个表连接起来并显示输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章