select * from A left join B on A.columnc=B.columnd results returned by above SQL will include both columns of A and B.And what if A and B have some columns with the same name?How to retrieve the value from PHP?
5 Réponses :
Vous voulez probablement être plus explicite dans votre requête. De cette façon, vous pouvez fournir des alias pour vos colonnes:
Si vous n'avez besoin que de quelques colonnes de votre deuxième table, vous pouvez (dans MySQL, de toute façon) faire quelque chose comme "Sélectionner a. *, B.column_that_also_exist_in_a comme SomaleIASSE ..."
@tim: devrait être capable de le faire dans n'importe quel système de base de données compatible ANSI.
La réponse est réalité dans le Documentation PHP :
"Si deux colonnes ou plus du résultat ont les mêmes noms de champs, la dernière colonne aura préséance. Pour accéder aux autres colonnes du même nom, vous devez soit accéder au résultat avec des indices numériques par Utilisation de Especialy mysql_fetch_row () code> ou ajouter des noms d'alias. Voir l'exemple sur le mysql_fetch_array () code> Description des alias. " p> mysql_fetch_array () code> semble être le meilleur candidat lorsque vous insistez sur l'utilisation de Star dans l'instruction SELECT: P> $row = mysql_fetch_array($result, MYSQL_BOTH)
En Java + MySQL à partir de l'objet ResulatsSet, vous pouvez utiliser par exemple GetString ("A.ID") et également GetString ("B.ID"), si votre requête ait été comme "Select A.Id, b.Id D'A, B " P>
Je ne sais pas s'il y a quelque chose comme ça dans PHP. P>
Cordialement p>
Cela peut être utile à quelqu'un: parce que j'utilisais des modèles, je ne pouvais pas utiliser facilement des alias à chaque fois, et je voulais la matrice associative pour une facilité d'utilisation. Credit Criccrow pour sa réponse sur Comment Comment mysql_fetch_array sur des tables jointes, mais les colonnes ont le même nom , mais dans MySQLI:
$qualified_names = array();
for ($i = 0; $i < mysqli_num_fields($result); ++$i) {
$fieldinfo=mysqli_fetch_field_direct($result,$i);
$table = $fieldinfo->table;
$field = $fieldinfo->name;
$qualified_names["$table.$field"]="$table.$field";
}
$newrow = array_combine($qualified_names, mysqli_fetch_array($result,MYSQLI_NUM));
Vous obtiendrez une erreur en indiquant des colonnes ambiguës - la base de données ne peut pas indiquer la partie des deux colonnes avec des noms identiques à utiliser.
@Rexem: Ce n'est pas vrai. Le SQL est absolument correct, l'erreur se produirait si la requête sélectionnait explicitement un nom de colonne existant dans les deux table, mais ne spécifiant pas le préfixe de la table.