sql >> Base de Datos >  >> RDS >> Mysql

Echo múltiples valores con el mismo nombre de columna en la misma tabla

Consejo profesional:Nunca usa SELECT * en el software a menos que sepa exactamente por qué lo está haciendo. En tu caso es perjudicial.

Supongo que su consulta es realmente contra el user y trade tablas que mencionó en su pregunta.

Primero, reformule su consulta utilizando SQL del siglo XXI, de la siguiente manera:

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

En segundo lugar, use esto para recuperar los nombres de sus usuarios y la identificación del artículo intercambiado.

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 

Vea cómo JOIN el user tabla dos veces, con dos alias diferentes s (para el remitente) y r (para el receptor)? Ese es el truco para obtener ambos nombres de las identificaciones.

Vea cómo empleamos los alias sender y receiver para eliminar la ambigüedad de los dos user_name columnas en el conjunto de resultados?

Ahora, cuando usas php fetch_array función, terminará con estos elementos en la matriz.

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

Las cadenas de índice de matriz corresponden a los nombres de alias que especificó en su SELECT cláusula en su consulta.

Entonces, una razón para evitar SELECT * es que puede obtener más de una columna con el mismo nombre, y eso significa fetch_array eliminará esos duplicados y perderá información útil de su conjunto de resultados.