0

私はこのようなテーブルを持っています

id | user_id | code  | type | time
-----------------------------------
2    2         fdsa    r      1358300000
3    2         barf    r      1358311000
4    2         yack    r      1358311220
5    3         surf    r      1358311000
6    3         yooo    r      1358300000
7    4         poot    r      1358311220

一致する時間ごとに、ユーザー2とユーザー3の連結された「コード」列を取得したいと思います。

次のような結果セットを受け取りたいです。

code     | time
-------------------------------
fdsayooo   1358300000
barfsurf   1358311000

クエリがユーザー4を検索していなかったため、yackpootコードがないことに注意してください。

4

2 に答える 2

1

関数を使用できGROUP_CONCATます。これを試して:

SELECT GROUP_CONCAT(code SEPARATOR '') code, time 
FROM tbl 
WHERE user_id in (2, 3)
GROUP BY time
HAVING COUNT(time) = 2;

SQL FIDDLE DEMO

于 2013-02-06T21:11:12.650 に答える
0

あなたが探しているのはですGROUP_CONCATが、良い例を提供するためにあなたの質問には多くの詳細が欠けています。これで始められるはずです:

SELECT GROUP_CONCAT(code), time 
FROM myTable 
WHERE user_id in (2, 3)
GROUP BY time;

不足している詳細は次のとおりです。

  1. 注文は必要ですか?グループ化を使用して順序付けがどのように行われるかわからない場合は、重要かどうかをテストする必要があります
  2. 他のフィールドが必要ですか?その場合、副選択または二次クエリを実行する必要が生じる可能性があります。
  3. 複数回の結果のみが必要ですか?
  4. 結果列の値の間に区切り文字を入れたくないですか(区切り文字をSEPARATOR ''で指定してください)GROUP_CONCAT

ノート:

  1. user_id他の何か(やなど)で追加したい場合は、GROUPBYにフィールドを追加できますtime
于 2013-02-06T21:04:23.467 に答える