2

1 つのテーブルから 2 つの異なるデータ セットを取得しようとしています。ただし、これにどのようにアプローチするかはよくわかりません。これは現在のテーブル設定です (関連する)。

+----+-----------+----------+------+------------+--------+--------+
| id | recipient | given_by | time | expiration | points | reason |
+----+-----------+----------+------+------------+--------+--------+
|  1 |   72      |     1    | time |    time    |   2    |  test  |
|  3 |   15      |     4    | time |    time    |   5    |  test  |
+----+-----------+----------+------+------------+--------+--------+

+----+----------+
| id | username |
+----+----------+
| 1  |   admin  |
| 4  |   user4  |
...
| 15 |  user15  |
...
| 72 |  user72  |
+----+----------+

次のクエリを使用して、受信者を名前と一致させることができました。

SELECT 
   usr.username, usr.id,  sl.recipient, sl.given_by, 
   sl.time, sl.experation, sl.points, sl.reason
FROM 
    DD_users AS usr
LEFT JOIN
    DD_schittlist AS sl
ON (sl.recipient = usr.id)       
GROUP BY
        usr.id
ORDER BY 
        sl.points DESC,
        usr.username

これにより、受信者 72 が user72 に一致しますが、given by 1 を作成して admin を表示し、given_by 4 を user4 として表示することも必要です。

4

2 に答える 2

3

これを試してください: (必要なのは、DD_users テーブルへの 2 番目の参照をエイリアスし、2 番目の結合ステートメントを追加してから、select ステートメントでエイリアス化されたユーザー名列を参照することだけです。)

  SELECT 
    usr.username, usr.id,  sl.recipient, sl.given_by, usr2.username, sl.time, sl.experation, sl.points, sl.reason
  FROM 
    DD_users AS usr
  LEFT JOIN DD_schittlist AS sl  ON (sl.recipient = usr.id)    
  JOIN DD_users as usr2 ON (usr2.id = sl.given_by)   
  GROUP BY
    usr.id
  ORDER BY 
    sl.points DESC,
    usr.username
于 2013-01-28T20:58:30.523 に答える
2

DD_usersテーブルに対して 2 回参加する必要がありidますgiven_by。それぞれが独自のエイリアスを取得し、SELECTそれらを明確にするためにリストで使用する必要があります ( usr, given)

  SELECT 
    /* The original username you already had */
    usr.username, 
    usr.id,  
    sl.recipient, 
    sl.given_by, 
    /* The given_by username from the given alias table */
    /* Be sure to alias this column here as well to differentiate them in the client */
    given.username AS given_by_username,
    sl.time, 
    sl.experation, 
    sl.points, 
    sl.reason
  FROM 
    DD_users AS usr
    /* First join you already had between id and recipient */
    LEFT JOIN DD_schittlist AS sl ON (sl.recipient = usr.id)       
    /* A second LEFT JOIN between DD_shittlist and DD_users as given */
    /* (LEFT JOIN permits nulls in DD_shittlist.given_by) */
    LEFT JOIN DD_users AS given ON sl.given_by = given.id
  GROUP BY
    usr.id
  ORDER BY 
    sl.points DESC,
    usr.username
于 2013-01-28T20:57:08.707 に答える