2012-12-13 170 views
0

好了,所以這是我的MySQL查詢沒有辦法做這樣的選擇

SELECT GROUP_CONCAT(CallCenterID) FROM tbl_mytable WHERE USER=1; 

所以這個查詢給了我所有的疑問在那裏。是user=1有沒有辦法讓所有這些CallCenterID具有user!=1,也user=1兩者都使用單個選擇查詢。

我想是有的東西一樣GroupConcat(CallCenterIds_not_in_user=1),GroupConcat(CallCenterIds_in_user=1)

+0

原諒我,但你想要得到那些= 1和那些!= 1,是不是所有的人? – George

+1

下降條件! :) – tuxuday

+0

請向我們顯示您的預期結果和表格結構。 – bonCodigo

回答

0

林想你想所有的人,所以沒有條件:

SELECT USER, GROUP_CONCAT(CallCenterID) FROM tbl_mytable ORDER BY USER 

這意味着,它甚至不會檢查user列。 ORDER BY會將具有相似USER值的記錄組合在一起。

+0

我想所有,但想知道哪一個是屬於用戶= 1,哪一個不是 – iJade

+0

@jade請參閱我的更新(: – George

2

試試這個:

SELECT USER=1, GROUP_CONCAT(CallCenterID) FROM tbl_mytable GROUP BY USER=1 
0

你好嘗試了這一點?你是指這樣的事情嗎?您可以用calleridsomeid替換nameuserid。我已經使用的用戶標識只是表的唯一關鍵,它不指userid按照你的:)

REference SQLFIDDLE

查詢

select group_concat(name) 
from mytable 
where someid = 1 
group by someid 
; 

結果:

GROUP_CONCAT(NAME) 
tim,ron,kate,pete 
+0

@Jade點擊參考SQLfiddle鏈接,你可以看到結果:) – bonCodigo

1

是的,有一種方法可以做這樣的選擇。實際的查詢實際上取決於你想返回的結果集。你想要一行還是兩行? CallCenterId是否應該在列表中複製?你想CallCenterId排除列表中的用戶!= 1,如果它出現在列表中的用戶= 1?所有這些都是可能的。


SQL Fiddle Here


測試用例:規範的

CREATE TABLE tbl_mytable(`user` INT UNSIGNED, CallCenterId VARCHAR(2)); 
INSERT INTO tbl_mytable 
VALUES (1,'a'),(1,'b'),(2,'a'),(2,'c'),(2,'a'),(2,'d'),(NULL,'x'); 

一個可能的解釋是,你想爲用戶= 1所有CallCenterId的列表,並你要出現在表中,但沒有出現在列表中的用戶= 1 ALL CallCenterId的另一個列表。基本上,你想要一個CallCenterId出現在一個列表或其他,但不是兩個。在測試的情況下,這將意味着你會想回到這樣的事情:

user=1 NOT user=1 
------ ---------- 
a,b  c,d,x 

該ResultSet可以通過這樣的查詢返回:

SELECT GROUP_CONCAT(IF(user_one,t.CallCenterId,NULL) 
     ORDER BY t.CallCenterId 
     ) AS `user=1` 
    , GROUP_CONCAT(IF(user_one,NULL,t.CallCenterId) 
     ORDER BY t.CallCenterId 
     ) AS `NOT user=1` 
    FROM ( 
     SELECT u.CallCenterId 
       , MAX(IF(u.user=1,1,0)) AS user_one 
      FROM tbl_mytable u 
      GROUP BY u.CallCenterId 
     ) t 

另一種可能的解釋是,你希望兩個CallCenterID列表返回同一行上,用含有CallCenterId用戶= 1一個列表,包含所有CallCenterId比用戶= 1,意義以外的所有用戶的其他列表,同樣CallCenterId可以出現在兩個列表。在這種情況下,像這樣將工作:

SELECT GROUP_CONCAT(DISTINCT IF(t.`user`=1,t.CallCenterID,NULL) 
     ORDER BY t.CallCenterId 
     ) AS `user=1` 
    , GROUP_CONCAT(DISTINCT IF(t.`user`!=1,t.CallCenterID,NULL) 
     ORDER BY t.CallCenterId 
     ) AS `user!=1` 
    FROM tbl_mytable t 

回報:

user=1 user!=1 
------ --------- 
a,b  a,c,d 

它也可能返回這些列表作爲兩個獨立的行,是否適合你更好。

SELECT IF(t.`user`=1,'user=1','user!=1') AS `which_users` 
    , GROUP_CONCAT(t.CallCenterID ORDER BY t.CallCenterId) AS `call_centers` 
    FROM tbl_mytable t 
GROUP BY which_users 
ORDER BY which_users DESC 

(:「!用戶= 1」注意的call_centers列表還將包括值的行,其中user列是NULL;那些行可以排除具有輕微的調整。)

which_users call_centers 
----------- -------------- 
user=1  a,b   
user!=1  a,a,c,d,x  

略微不同的查詢將在列表中消除重複(使用DISTINCT關鍵字),並消除其中user柱IS NULL任何行(添加WHERE子句):

SELECT IF(t.`user`=1,'user=1','user!=1') AS `which_users` 
    , GROUP_CONCAT(t.CallCenterID ORDER BY t.CallCenterId) AS `call_centers` 
    FROM tbl_mytable t 
WHERE t.user IS NOT NULL 
GROUP BY which_users 
ORDER BY which_users DESC 

回報:

which_users call_centers 
----------- ------------ 
user=1  a,b 
user!=1  a,c,d 

如果這些都不是你在找什麼,你需要更加清晰地明確你想要返回什麼結果集。

相關問題