3

私が持っているとしましょう:

USERS:
userid | name
1      | John
2      | Jack

HITS:
id | userid | time
1  | 1      | 50
2  | 1      | 51
3  | 2      | 52
4  | 1      | 53
5  | 2      | 54
6  | 2      | 55

私はこのような構造になってしまう必要があります:

array() {
  [user 1] {
    hit 1 => 50
    hit 2 => 51
    hit 4 => 53
  }
  [user 2] {
    hit 3 => 52
    hit 5 => 54
    hit 6 => 55
  }
}

これを行うための最悪の方法は次のとおりです。

  1. *ユーザーを選択
  2. 各ユーザーのヒットをすべて選択

このようにそれぞれを実行せずに、単一のクエリとして結果を取得する方法はありますか?

4

4 に答える 4

3

左外部結合を使用し、左側のテーブル(メイン)からすべてのレコードを取得し、右側のテーブルから他の一致を取得します。

select 
users.userid,  
h.time 
from  
users  
    left outer join hits h   
    on(  
      users.userid = h.userid
    )
于 2013-02-26T09:47:15.973 に答える
0

はい、これに使用できますJOIN

SELECT * FROM users
INNER JOIN hits on users.id = hits.user_id

結果はフラットな配列として表示されますが、それに応じて配列を簡単にループしてフォーマットできます。

于 2013-02-26T09:42:19.003 に答える
0

必要なSQLステートメントは単純に使用していますINNER JOINまたは、特定のユーザーがテーブルヒットに一致するレコードを持っていない場合でもレコードを返したい場合はLEFT JOIN

SELECT  a.*, b.time
FROM    users a
        INNER JOIN hits b
            ON a.userid = b.userid

クエリの結果は1次元配列であるため、アプリケーションレベルで結果をフォーマットする必要があります。

結合についてさらに知識を深めるには、以下のリンクにアクセスしてください。

于 2013-02-26T09:42:34.980 に答える
0
SELECT * FROM users
LEFT JOIN hits on users.id = hits.user_id
于 2013-02-26T09:47:21.653 に答える