sql >> データベース >  >> RDS >> Mysql

同じテーブルに同じ列名を持つ複数の値をエコーし​​ます

    プロのヒント:決して SELECT *を使用します あなたがそうしている理由を正確に知らない限り、ソフトウェアで。あなたの場合、それは有害です。

    あなたのクエリは本当にuserに対してであると思います およびtrade 質問で言及した表。

    まず、21世紀のSQLを使用して、次のようにクエリを再キャストします。

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

    次に、これを使用して、ユーザーの名前と取引されたアイテムIDを取得します。

    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 
    

    JOINの方法をご覧ください user テーブルを2回、2つの異なるエイリアスs (送信者用)およびr (受信機用)?これが、IDから両方の名前を取得するための秘訣です。

    エイリアスsenderの採用方法をご覧ください およびreceiver 2つのuser_nameの曖昧さを解消します 結果セットの列?

    これで、php fetch_arrayを使用すると 関数を使用すると、これらの要素が配列に含まれることになります。

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

    配列のインデックス文字列は、SELECTで指定したエイリアス名に対応しています。 クエリの句。

    したがって、SELECT *を避ける理由の1つ 同じ名前の複数の列を取得できるということです。つまり、fetch_array これらの重複を排除するため、結果セットから有用な情報が失われます。




    1. ZF2はDBクエリの変数をサニタイズします

    2. Oracleの数値関数かどうかを確認します

    3. 長時間実行されているデータベース操作をキャンセルするにはどうすればよいですか?

    4. オラクル-どのステートメントをコミットする必要がありますか?