Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ecoar vários valores com o mesmo nome de coluna na mesma tabela


Dica profissional:Nunca use SELECT * em software, a menos que você saiba exatamente por que está fazendo isso. No seu caso é prejudicial.

Estou assumindo que sua consulta é realmente contra o user e trade tabelas que você mencionou em sua pergunta.

Primeiro, reformule sua consulta usando o SQL do século XXI, da seguinte maneira:
SELECT * 
  FROM trade AS t
  JOIN user AS s ON  s.user_id = t.user_id_sender
 WHERE s.facebook_id = $fbid 

Segundo, use isso para recuperar os nomes de usuário e o ID do item negociado.
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 

Veja como JOIN o user table duas vezes, com dois aliases diferentes s (para remetente) e r (para receptor)? Esse é o truque para buscar os dois nomes dos IDs.

Veja como empregamos os aliases sender e receiver para desambiguar os dois user_name colunas no conjunto de resultados?

Agora, quando você usa o php fetch_array função, você acabará com esses elementos na matriz.
$history['sender']
$history['receiver']
$history['item_id']

As strings de índice de array correspondem aos nomes de alias que você especificou em seu SELECT cláusula em sua consulta.

Portanto, uma razão para evitar SELECT * é que você pode obter mais de uma coluna com o mesmo nome, e isso significa fetch_array eliminará essas duplicatas e, portanto, perderá informações úteis do seu conjunto de resultados.