2012-12-13 3 views
0

확인을 할 수있는 방법이 그래서이 쿼리를 얻을 수있는 방법이 어디 user=1 됐나가 나에게 모든 쿼리를 제공 내 MySQL의 쿼리그래서 여기에 이러한 선택

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

모든 user!=1user=1이 그 CallCenterID 둘 다 단일 선택 쿼리를 사용합니다.

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

이 그것도 user 열을 확인하지 않습니다 것을 의미합니다 :

는 내가 원하는 것은 당신이 그들 모두를 원하는 생각 GroupConcat(CallCenterIds_not_in_user=1),GroupConcat(CallCenterIds_in_user=1)

+0

나를 용서 하시되, 당신은 = 1이고 그것들은 = 1 인 모든 것을 얻고 싶습니까? – George

+1

드롭 어디 조건! :) – tuxuday

+0

우리에게 당신의 기대 결과와 테이블 구조를 보여주십시오. – bonCodigo

답변

0

임과 같은 어떤 것을, 그래서 아무 조건이다. ORDER BY은 비슷한 USER 값을 가진 레코드를 그룹화합니다.

+0

나는 모두를 원하지만 어떤 것이 User = 1에 속하고 어떤 것이 하나인지 알고 싶지 않다 – iJade

+0

@jade 내 업데이트 (참조 : – George

2

이 시도 :

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

안녕하세요이 밖으로 시도? 이런 식으로 말하는거야? namecalleridsomeid으로 대체하면 userid으로 바뀔 수 있습니다.

GROUP_CONCAT(NAME) 
tim,ron,kate,pete 
: 내가 사용했던 사용자 ID, 그것은 당신에 따라, userid 참조하지 않습니다 :)

REference SQLFIDDLE

쿼리를

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

결과를 테이블에 딱 고유 키입니다

+0

@Jade 참조 SQLfiddle 링크를 클릭하면 결과를 볼 수 있습니다 :) – bonCodigo

1

예, 그런 선택을하는 방법이 있습니다. 실제 쿼리는 실제로 반환 할 결과 집합에 따라 다릅니다. 하나의 행 또는 두 개의 개별 행을 원하십니까? CallCenterId가 목록 내에서 복제되어야합니까? CallCenterId가 user = 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의 목록을 원하는이며, 표에 나타나지만 user = 1에 대한 목록으로 표시되지 않는 모든 CallCenterId의 다른 목록이 필요합니다. 기본적으로 CallCenterId를 하나의 목록이나 다른 목록에 표시하려고하지만 둘 다 표시하지 않습니다.테스트의 경우, 이것은 당신이 뭔가를 반환 할 것입니다 의미 :

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 

또 다른 가능한 해석이다 : 결과 집합이 같은 쿼리에 의해 반환 될 수

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

동일한 행에 두 개의 CallCenterID 목록이 반환되고 하나의 목록에는 사용자에 대한 CallCenterId가 포함되고 다른 목록에는 user = 1 이외의 모든 사용자에 대한 모든 CallCenterId가 포함됩니다. 즉 동일한 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'NOTE 대한 call_centers 목록 또한 user 열이 NULL 인 행에 대한 값을 포함한다; 그 행이 약간 트윅으로 배제 할 수있다.)

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

A (DISTINCT 키워드를 사용하여), 상기 user 컬럼 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 

, 좀 더 명확하게 반환 원하는 결과 집합을 지정해야합니다.

관련 문제