sql >> Database >  >> RDS >> Mysql

Echo meerdere waarden met dezelfde kolomnaam in dezelfde tabel

Pro-tip:Nooit gebruik SELECT * in software, tenzij u precies weet waarom u dit doet. In jouw geval is het schadelijk.

Ik neem aan dat je vraag echt gericht is tegen de user en trade tabellen die u in uw vraag noemde.

Herschik eerst uw zoekopdracht met behulp van SQL van de 21e eeuw, als volgt:

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

Ten tweede, gebruik dit om de namen van uw gebruikers en de verhandelde item-ID op te halen.

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 

Bekijk hoe we JOIN de user tabel twee keer, met twee verschillende aliassen s (voor afzender) en r (voor ontvanger)? Dat is de truc om beide namen uit ID's te halen.

Bekijk hoe we de aliassen sender gebruiken en receiver om de twee user_name . ondubbelzinnig te maken kolommen in de resultatenset?

Als u nu de php fetch_array . gebruikt functie, krijg je deze elementen in de array.

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

De array-indextekenreeksen komen overeen met de aliasnamen die u hebt opgegeven in uw SELECT clausule in uw zoekopdracht.

Dus een reden om SELECT * te vermijden is dat je meer dan één kolom met dezelfde naam kunt krijgen, en dat betekent fetch_array zal deze duplicaten verwijderen en dus zal nuttige informatie uit uw resultatenset verloren gaan.




  1. Installeer Mtop (MySQL Database Server Monitoring) in RHEL/CentOS 6/5/4, Fedora 17-12

  2. SQL IN-clausule langzamer dan afzonderlijke query's

  3. Vergelijking van databasekolomtypen in MySQL, PostgreSQL en SQLite? (cross-mapping)

  4. MySQL Selecteer laatste rij met specifieke waarde