Php 多个内部连接擦除属性
我有两张桌子: 专辑(idalbum、idauthor、idcompositor、idfeat) 人员(身份证、名、姓) 我的查询Php 多个内部连接擦除属性,php,mysql,sql,inner-join,Php,Mysql,Sql,Inner Join,我有两张桌子: 专辑(idalbum、idauthor、idcompositor、idfeat) 人员(身份证、名、姓) 我的查询 SELECT * FROM albums a INNER JOIN people p ON a.idauthor = p.id INNER JOIN people p1 ON a.idcompositor = p1.id INNER JOIN people p2 ON a.idfeat = p2.id where a.idalbum=:id 我想要什么: Alb
SELECT * FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
我想要什么:
Album,
p[First Name, Last Name],
p1[First Name, Last Name],
p2[First Name, Last Name]
我的问题:
当我打印查询时,我只有一个名字和一个姓氏,即“p2”值
提前感谢:)
然后,您将能够访问作者、作曲家和特写,以及所有专辑属性
然后,您将能够访问作者、作曲家和特写,以及所有专辑属性
然后,您将能够访问作者、作曲家和特写,以及所有专辑属性
然后,您将能够访问作者、作曲家和特写,以及所有专辑属性。您只需将其他字段添加到查询结果中:
a.*,p.*,p1.*,p2.
SELECT a.*,p.*,p1.*,p2.* FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
对于其他数据库(例如ORACLE),您的原始查询甚至无法工作,因为如果不指定星号所属的表(例如
a.*
),则不允许将*
与多个表组合使用。您只需将其他字段添加到查询结果中即可:a.*,p.*,p1.*,p2.*
SELECT a.*,p.*,p1.*,p2.* FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
对于其他数据库(例如ORACLE),您的原始查询甚至无法工作,因为如果不指定星号所属的表(例如
a.*
),则不允许将*
与多个表组合使用。您只需将其他字段添加到查询结果中即可:a.*,p.*,p1.*,p2.*
SELECT a.*,p.*,p1.*,p2.* FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
对于其他数据库(例如ORACLE),您的原始查询甚至无法工作,因为如果不指定星号所属的表(例如
a.*
),则不允许将*
与多个表组合使用。您只需将其他字段添加到查询结果中即可:a.*,p.*,p1.*,p2.*
SELECT a.*,p.*,p1.*,p2.* FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
对于其他数据库(例如ORACLE),您的原始查询甚至无法工作,因为如果不指定星号所属的表(例如
a.*
),则不允许将*
与多个表组合使用。您的问题是每一列都有相同的名称。当结果转换为PHP数组时,后面的列将用相同的索引/列名覆盖第一列。您必须为每一列指定一个唯一标识符,才能访问每一个值
SELECT *, p.firstname as p_firstname, p.lastname AS p_lastname,
p1.first_name AS p1_firstname, [...]
FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
作为替代方案,您可以使用另一种获取样式,该样式通过列号将列插入数组中。(如果您使用的是PDO,请参阅)您的问题是每列都有相同的名称。当结果转换为PHP数组时,后面的列将用相同的索引/列名覆盖第一列。您必须为每一列指定一个唯一标识符,才能访问每一个值
SELECT *, p.firstname as p_firstname, p.lastname AS p_lastname,
p1.first_name AS p1_firstname, [...]
FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
作为替代方案,您可以使用另一种获取样式,该样式通过列号将列插入数组中。(如果您使用的是PDO,请参阅)您的问题是每列都有相同的名称。当结果转换为PHP数组时,后面的列将用相同的索引/列名覆盖第一列。您必须为每一列指定一个唯一标识符,才能访问每一个值
SELECT *, p.firstname as p_firstname, p.lastname AS p_lastname,
p1.first_name AS p1_firstname, [...]
FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
作为替代方案,您可以使用另一种获取样式,该样式通过列号将列插入数组中。(如果您使用的是PDO,请参阅)您的问题是每列都有相同的名称。当结果转换为PHP数组时,后面的列将用相同的索引/列名覆盖第一列。您必须为每一列指定一个唯一标识符,才能访问每一个值
SELECT *, p.firstname as p_firstname, p.lastname AS p_lastname,
p1.first_name AS p1_firstname, [...]
FROM albums a
INNER JOIN people p ON a.idauthor = p.id
INNER JOIN people p1 ON a.idcompositor = p1.id
INNER JOIN people p2 ON a.idfeat = p2.id
where a.idalbum=:id
作为替代方案,您可以使用另一种获取样式,该样式通过列号将列插入数组中。(如果您正在使用PDO,请参阅)