10
votes

Comment récupérer le résultat de la ligne MySQL avec plusieurs colonnes de même nom avec PHP?

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?

2 commentaires

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.


5 Réponses :


2
votes

Vous devez utiliser alias de colonne dans l'instruction SELECT.


0 commentaires

18
votes

Vous voulez probablement être plus explicite dans votre requête. De cette façon, vous pouvez fournir des alias pour vos colonnes: xxx


2 commentaires

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.



8
votes

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 mysql_fetch_row () code> ou ajouter des noms d'alias. Voir l'exemple sur le mysql_fetch_array () code> Description des alias. " p>

Especialy 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) 


0 commentaires

2
votes

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 "

Je ne sais pas s'il y a quelque chose comme ça dans PHP.

Cordialement


0 commentaires

1
votes

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


0 commentaires