2013-02-06 12 views
0

我有一個表像這樣複雜的接合多個ID的

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

+1

爲什麼只有用戶2和3?代碼應該在什麼順序?是否有某種時間戳的「解決方案」,或者你想**精確**匹配的時間?而... _WHY_你在做這個嗎? –

+0

+1 @ Clockwork-Muse爲什麼我完全逃避了。 – Matthew

回答

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

+1

+1,但在GROUP_CONCAT中添加'ORDER BY id'可能會使結果更具可預測性。 –

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. ,如果你想,你可以添加更多的字段的GROUP BY通過其他的東西(如user_idtime)做