Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Echo mehrerer Werte mit demselben Spaltennamen in derselben Tabelle

Profi-Tipp:Niemals Verwenden Sie SELECT * in Software, es sei denn, Sie wissen genau, warum Sie dies tun. In Ihrem Fall ist es schädlich.

Ich gehe davon aus, dass Ihre Abfrage wirklich gegen den user gerichtet ist und trade Tabellen, die Sie in Ihrer Frage erwähnt haben.

Formulieren Sie zunächst Ihre Abfrage mit SQL des 21. Jahrhunderts wie folgt um:

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

Verwenden Sie dies zweitens, um die Namen Ihrer Benutzer und die gehandelte Artikel-ID abzurufen.

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 

Sehen Sie, wie wir JOIN werden der user Tabelle zweimal, mit zwei verschiedenen Aliasnamen s (für Absender) und r (für Empfänger)? Das ist der Trick, um beide Namen aus IDs abzurufen.

Sehen Sie, wie wir die Aliase sender verwenden und receiver um die beiden user_name eindeutig zu machen Spalten in der Ergebnismenge?

Wenn Sie nun das fetch_array von php verwenden Funktion erhalten Sie diese Elemente im Array.

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

Die Array-Indexzeichenfolgen entsprechen den Aliasnamen, die Sie in Ihrem SELECT angegeben haben Klausel in Ihrer Abfrage.

Ein Grund also, SELECT * zu vermeiden ist, dass Sie mehr als eine Spalte mit demselben Namen erhalten können, und das bedeutet fetch_array wird diese Duplikate eliminieren und somit nützliche Informationen aus Ihrer Ergebnismenge verlieren.