【问题标题】:SQL join when a field name is the same字段名相同时的SQL join
【发布时间】:2010-11-25 20:43:46
【问题描述】:

我在节点和 url_alias 中都有字段“语言”。 当我进行转储时,第二个“语言”变量会覆盖第一个。 如何识别这两个变量?

$string =   "SELECT * FROM {node} as node " .
            " LEFT JOIN {url_alias} as url " .
            " ON url.src = CONCAT('node/', node.nid) " .                
            " ORDER BY node.type , node.nid " ;

$result= db_query($string);
while ($row = db_fetch_object($result)){
echo $row->language;
var_dump($row);

【问题讨论】:

    标签: sql mysql drupal join


    【解决方案1】:

    SELECT 子句中明确指定列名,而不是使用*,并为所有重复的列名指定别名。例如,

    SELECT node.nid,
        node.language as NodeLanguage,
        url.language as UrlLanguage
    FROM {node} as node 
    LEFT JOIN {url_alias} as url  
    ON url.src = CONCAT('node/', node.nid)                 
    ORDER BY node.type , node.nid
    

    【讨论】:

    • 谢谢...我打算这样做,但它会变得非常冗长。有没有办法说“所有字段”+“重命名这些”。或者使用这种语法为文件名添加前缀的方法?我在其他应用程序中看到过类似 $row->file->field 的东西。
    • 您可以编写一个存储过程来执行此操作,但我不建议这样做。如果要输入的列名太多(数百个?),则可能需要首先处理设计问题。
    • 几十个。懒惰的程序员doez不喜欢小费。 :)
    • @newt:你的问题有 28 个单词,不包括查询和标签。你可以的!
    • 有时提出问题比实施答案需要更长的时间。
    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2014-05-05
    • 2022-11-10
    • 1970-01-01
    • 2013-04-06
    • 2022-10-15
    • 2012-02-14
    • 2019-08-03
    相关资源
    最近更新 更多