2010-11-25 19 views
1

J'ai un champ "langue" dans les deux noeud et url_alias. Lorsque je fais un vidage, la deuxième variable "language" écrase la première. Comment puis-je identifier les deux variables?Jointure SQL lorsqu'un nom de champ est le même

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

Répondre

6

Spécifiez les noms de colonnes explicitement dans votre clause SELECT plutôt que d'utiliser *, et donner les noms de colonnes en double un alias. Par exemple,

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

Merci ... J'allais le faire mais ça allait devenir très bavard. Existe-t-il un moyen de dire "tous les champs" + "renommer ceux-ci". Ou un moyen de préfixer avec le nom de fichier en utilisant cette syntaxe? J'ai vu des choses comme le champ $ row-> file-> dans d'autres applications. – newt

+0

Vous pouvez écrire une procédure stockée pour le faire, mais je ne le recommande pas. Si vous avez trop de noms de colonnes à saisir (des centaines?), Il y a probablement des problèmes de conception à résoudre en premier. – RedFilter

+0

des dizaines. lasy programer doez n'aime pas la tipe. :) – newt