2010-11-25 13 views
1

nodeとurl_aliasの両方にフィー​​ルド "language"があります。 ダンプを実行すると、2番目の "language"変数が最初の変数を上書きします。 両方の変数をどのように識別できますか?フィールド名が同じ場合のSQL結合

$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); 

答えて

6

あなた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 
+0

ありがとうございます...私はそれを行うつもりでしたが、非常に冗長になる予定でした。 "すべてのフィールド" + "名前を変更する"と言う方法がありますか?または、この構文を使用してファイル名の接頭辞を付ける方法は?私は他のアプリケーションで$ row-> file-> fieldのようなものを見てきました。 – newt

+0

あなたはそれを行うストアドプロシージャを書くことができますが、私はそれをお勧めしません。入力する列の名前が多すぎる場合は、最初に処理する必要がある設計上の問題があります。 – RedFilter

+0

数十。レイシープログラマーdoezはtipeしたくない。 :) – newt

関連する問題