Eam*_*onn 0 php mysql alias self-join echo
我有两个主要的MySQL表(配置文件和联系人)和许多补充表(以prm_为前缀).它们通过PHP访问和操作.
在这个例子中,我正在查询配置文件表,我将在其中检索所有者ID和育种者ID.然后将针对联系人表格引用该表格,其中保留了所有者和育种者的信息.
关于连接和别名的另一个问题我在这里得到了很大的帮助,在那里我也提供了以下查询.不幸的是,我在实际回应结果方面遇到了巨大的困难.处理自联接和别名的每个站点都提供了可爱的查询示例 - 但随后跳到"和此输出等等".它是如何输出的?
SELECT *
FROM (
SELECT *
FROM profiles
INNER JOIN prm_breedgender
ON profiles.ProfileGenderID = prm_breedgender.BreedGenderID
LEFT JOIN contacts ownerContact
ON profiles.ProfileOwnerID = ownerContact.ContactID
LEFT JOIN prm_breedcolour
ON profiles.ProfileAdultColourID = prm_breedcolour.BreedColourID
LEFT JOIN prm_breedcolourmodifier
ON profiles.ProfileColourModifierID = prm_breedcolourmodifier.BreedColourModifierID
) ilv LEFT JOIN contacts breederContact
ON ilv.ProfileBreederID = breederContact.ContactID
WHERE ProfileName != 'Unknown'
ORDER BY ilv.ProfileGenderID, ilv.ProfileName ASC $limit
Run Code Online (Sandbox Code Playgroud)
再加上这个是以下PHP:
$owner = ($row['ownerContact.ContactFirstName'] . ' ' . $row['ownerContact.ContactLastName']);
$breeder = ($row['breederContact.ContactFirstName'] . ' ' . $row['breederContact.ContactLastName']);
Run Code Online (Sandbox Code Playgroud)
所有细节除了联系人(性别,颜色等)返回罚款.在$owner和$breeder变量是空的.
任何帮助我解决这个问题都将受到大力赞赏.
编辑:我最后的工作查询:
SELECT ProfileOwnerID, ProfileBreederID,
ProfileGenderID, ProfileAdultColourID, ProfileColourModifierID, ProfileYearOfBirth,
ProfileYearOfDeath, ProfileLocalRegNumber, ProfileName,
owner.ContactFirstName AS owner_fname, owner.ContactLastName AS owner_lname,
breeder.ContactFirstName AS breeder_fname, breeder.ContactLastName AS breeder_lname,
BreedGender, BreedColour, BreedColourModifier
FROM profiles
LEFT JOIN contacts AS owner
ON ProfileOwnerID = owner.ContactID
LEFT JOIN contacts AS breeder
ON ProfileBreederID = breeder.ContactID
LEFT JOIN prm_breedgender
ON ProfileGenderID = prm_breedgender.BreedGenderID
LEFT JOIN prm_breedcolour
ON ProfileAdultColourID = prm_breedcolour.BreedColourID
LEFT JOIN prm_breedcolourmodifier
ON ProfileColourModifierID = prm_breedcolourmodifier.BreedColourModifierID
WHERE ProfileName != 'Unknown'
ORDER BY ProfileGenderID, ProfileName ASC $limit
Run Code Online (Sandbox Code Playgroud)
然后我可以输出:
$owner = ($row['owner_lname'] . ' - ' . $row['owner_fname']);
Run Code Online (Sandbox Code Playgroud)
非常感谢大家!
我猜你是使用mysql_fetch_array或mysql_fetch_assoc函数来从结果集中获取数组?
在这种情况下,你不能使用
$row['ownerContact.ContactFirstName']
Run Code Online (Sandbox Code Playgroud)
正如PHP-Docs所读:
如果结果的两列或更多列具有相同的字段名称,则最后一列将优先.要访问同名的其他列,必须使用列的数字索引或为列创建别名.对于别名列,您无法使用原始列名访问内容.
因此,您可以AS在SQL查询中使用a 来为doubled行设置其他名称,也可以使用编号索引来访问它们.
这可能看起来像这样:
AS您的查询在标准SQL查询中,结果集中的列的名称与其值来自的列类似.有时,由于命名冲突,这可能是一个问题.AS在查询中使用-command,可以重命名结果集中的列:
SELECT something AS "something_else"
FROM your_table
Run Code Online (Sandbox Code Playgroud)
这会将-column 重命名something为something_else(你可以保留""-quotes,但我认为它使它更具可读性).
另一种方法是使用column-index而不是名字.看看这个查询:
SELECT first_name, last_name
FROM some_table
Run Code Online (Sandbox Code Playgroud)
结果集将包含两列,0 ==> first_name和1 ==> last_name.您可以使用此数字访问结果集中的列:
$row[0] // would be the "first_name"-column
$row[1] // would be the "last_name"-column
Run Code Online (Sandbox Code Playgroud)
为了能够使用列索引,您需要使用mysql_fetch_row或者mysql_fetch_assoc-function,它提供关联数组,数字数组或两者("both"是标准的).