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

请注意,没有 yackpoot 代码,因为查询不是在寻找用户 4。

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 小提琴演示

于 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_idtime)来添加更多字段到 GROUP BY。
于 2013-02-06T21:04:23.467 回答