php - 如何输出使用别名的 MySQL 查询的结果?

标签 php mysql echo alias self-join

我有两个主要的 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

与此相结合的是以下 PHP:

$owner = ($row['ownerContact.ContactFirstName'] . ' ' . $row['ownerContact.ContactLastName']);
$breeder = ($row['breederContact.ContactFirstName'] . ' ' . $row['breederContact.ContactLastName']);

除了联系人(性别、肤色等)之外的所有详细信息都返回正常。 $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

然后我可以通过以下方式输出:

$owner = ($row['owner_lname'] . ' - ' . $row['owner_fname']);

非常感谢大家!

最佳答案

我猜您正在使用 mysql_fetch_arraymysql_fetch_assoc 函数从结果集中获取数组?

在这种情况下,你不能使用

$row['ownerContact.ContactFirstName']

作为PHP-Docs read :

If two or more columns of the result have the same field names, the last column will take precedence. To access the other column(s) of the same name, you must use the numeric index of the column or make an alias for the column. For aliased columns, you cannot access the contents with the original column name.

因此,您可以在 SQL 查询中使用 AS 为加倍的行设置其他名称,或者使用编号索引来访问它们。


这看起来像这样:

在查询中使用 AS

在您的标准 SQL 查询中,结果集中的列的名称与它们的值来自的列相同。有时,由于命名冲突,这可能是一个问题。在查询中使用 AS 命令,您可以重命名结果集中的列:

SELECT something AS "something_else"
FROM your_table

这会将 something 列重命名为 something_else(您可以将 "" 引号去掉,但我认为它成功了更具可读性)。

使用数组的列索引

另一种方法是使用列索引而不是它们的名称。看看这个查询:

SELECT first_name, last_name
FROM some_table

结果集将包含两列,0 ==> first_name1 ==> last_name。您可以使用此数字访问结果集中的列:

$row[0] // would be the "first_name"-column
$row[1] // would be the "last_name"-column

为了能够使用列索引,您需要使用 mysql_fetch_rowmysql_fetch_assoc 函数,它提供了一个关联数组,一个数字数组,或两者(“两者”是标准的)。

关于php - 如何输出使用别名的 MySQL 查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6934982/

相关文章:

mysql - SQL - 排序依据 "Custom Preference List"

mysql - 如何从前两列获取月份和年份的完整日期并使用完整日期更新第三列

mysql - 从表中得到正确的结果

php - 如何用里面的php函数回显href?

bash - 猫、 echo 和进程替换

PHP从文本中提取数据

PHP:缓冲区的isset?

php - 如何安全地存储数据库连接信息?

php - 如何在具有键值对数据数组的表中一次插入多行

linux - 循环回显显示多个变量的 'live update'