【问题标题】:SQL SELECT statement - same column namesSQL SELECT 语句 - 相同的列名
【发布时间】:2014-03-07 23:25:13
【问题描述】:

假设我有以下被过度简化的SELECT 声明。

SELECT a.Name, b.Name FROM table a LEFT JOIN table b ON a.ID=b.TID

使用 php 我运行以下命令:

while ($result = mysql_fetch_array($results)) {

   echo $result["Name"];

}

这会给我b.Name 的结果。我知道我可以使用a.Name AS aName, B.Name AS bName,但这有时可能会使您的查询很长并且使用a.* 的情况变得复杂。我尝试使用$result["a.Name"],但它不起作用。我知道这行得通$result[0],但如果不使事情复杂化,这并不总是可行的。

请问有没有其他方法可以显示a.Name

【问题讨论】:

    标签: php mysql sql select


    【解决方案1】:

    简单的回答:不。

    长答案:PHP 中的数组索引必须是唯一的。这样,最后一个相似的名称列将获得优先权。

    如果结果的两列或多列具有相同的字段名称,则最后一列将优先。要访问同名的其他列,您必须使用该列的数字索引或为该列创建别名。对于别名列,您无法使用原始列名访问内容。

    source

    但是,您可以通过使用别名来解决此问题。

    SELECT a.Name as aName, b.Name as bName FROM table a LEFT JOIN table b ON a.ID=b.TID
    

    然后您可以使用$result["aName"]$result["bName"] 访问两个表中的名称

    【讨论】:

    • 谢谢 - 实际上我通常使用别名。希望在我需要使用SELECT *的情况下有另一种方法
    【解决方案2】:

    根据您的要求,您可以考虑将查询分成两个 fetch 语句。这将允许您拥有重复的列名。

    SELECT a.* FROM table a LEFT JOIN table b ON a.ID=b.TID
    
    SELECT b.* FROM table b LEFT JOIN table a ON a.ID=b.TID
    

    【讨论】:

    • 然而,这意味着我宁愿避免从数据库请求 2 个调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2014-12-05
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2012-05-04
    相关资源
    最近更新 更多