Mysql
 sql >> Base de données >  >> RDS >> Mysql

Écho de plusieurs valeurs avec le même nom de colonne dans la même table

Conseil de pro :Jamais utilisez SELECT * dans le logiciel à moins que vous ne sachiez exactement pourquoi vous le faites. Dans votre cas, c'est nocif.

Je suppose que votre requête est vraiment contre le user et trade tables que vous avez mentionnées dans votre question.

Tout d'abord, reformulez votre requête en utilisant le SQL du 21e siècle, comme suit :

SELECT * 
  FROM trade AS t
  JOIN user AS s ON  s.user_id = t.user_id_sender
 WHERE s.facebook_id = $fbid 

Ensuite, utilisez-le pour récupérer les noms de vos utilisateurs et l'identifiant de l'objet échangé.

SELECT s.user_name AS sender,
       r.user_name AS receiver,
       t.trade_id AS item_id
  FROM trade AS t
  JOIN user AS s ON  s.user_id = t.user_id_sender
  JOIN user AS r ON  r.user_id = t.user_id_receiver
 WHERE s.facebook_id = $fbid 

Découvrez comment nous JOIN l'user table deux fois, avec deux alias différents s (pour l'expéditeur) et r (pour le récepteur) ? C'est l'astuce pour récupérer les deux noms à partir des identifiants.

Découvrez comment nous utilisons les alias sender et receiver pour lever l'ambiguïté des deux user_name colonnes dans le jeu de résultats ?

Maintenant, lorsque vous utilisez le php fetch_array fonction, vous vous retrouverez avec ces éléments dans le tableau.

$history['sender']
$history['receiver']
$history['item_id']

Les chaînes d'index du tableau correspondent aux noms d'alias que vous avez spécifiés dans votre SELECT clause dans votre requête.

Donc, une raison d'éviter SELECT * est que vous pouvez obtenir plus d'une colonne avec le même nom, et cela signifie fetch_array éliminera ces doublons et ainsi il perdra des informations utiles de votre ensemble de résultats.