2012-05-22 6 views
5

예를 들어, queue_watch가 0으로 표시되면 실제 mysql 출력에 No라고 말하고, 그렇지 않으면 Yes라고 말합니다. 체계를 변경하는 것은 선택 사항이 아닙니다.값에 따라 mysql 출력을 변경하는 방법

SELECT user.user_name, queue.queue_name, queue_access.queue_access, 
    queue_access.queue_watch 
FROM queue_access 
INNER JOIN user ON user.user_id = queue_access.user_id 
INNER JOIN queue ON queue.queue_id = queue_access.queue_id 
WHERE queue_access <> '' OR queue_watch = 1 
ORDER BY user_name; 

는 SQL은 내가 원하는 것을 위해 작동하지만, 나는 PHP보다는 SQL을 사용하여 출력을 변경하는 것은 가능하면 알고 싶다. 또한 하나의 행에있는 모든 queue_names를 각 user_name에 그룹화하여 153 개의 행을 반환 할 필요가 없습니다.

감사

+0

"또한,이 그룹에 가능하다 ..."설명서에'GROUP BY'를 검색하십시오. 'GROUP_CONCAT'을보고 싶을 수도 있습니다. 한 가지 질문에 두 가지 완전히 관련없는 질문을하지 마십시오. –

+0

두 부분으로 구성된 질문을 유감스럽게 생각해서 유감스럽게 생각합니다.하지만 동일한 쿼리와 관련이 있기 때문에 생각할 수도 있습니다. 나는 GROUP BY를 생각해 보았지만 하나의 사용자가 많은 대기열에 속할 수 있기 때문에 문제는 하나의 사용자와 하나의 대기열 이름을 반환한다. 그래서 일종의 목록에 넣고 싶지만 그럴 수 있는지 모르겠다. –

+0

미안하다. Group_concat을 선택했을 때, 그룹에 의해 그룹화되었습니다. –

답변

8

오버 헤드가 아닙니다. 쿼리에서 수행하는 것이 좋습니다.

이 시도 -

SELECT user.user_name, queue.queue_name, queue_access.queue_access, 
     IF(queue_access.queue_watch = 0, 'No', 'Yes') 
FROM queue_access 
INNER JOIN user ON user.user_id = queue_access.user_id 
INNER JOIN queue ON queue.queue_id = queue_access.queue_id 
WHERE queue_access <> '' OR queue_watch = 1 
ORDER BY user_name; 
+0

이것은 실제로 내가 필요로했던 것을 해결했다. (솔직히 처음에 그것을 보았다), 나는 칼럼의 이름을 바꾸기 위해 as를 추가했다. 감사합니다 –

+0

당신은 환영합니다. – JHS

4

당신은 표준 CASE 표현을 사용할 수 있습니다. CASE 표현을 작성하는 데 약간 다른 두 가지 방법이 있습니다.

간단한 CASE 식 :

SELECT 
    CASE queue_access.queue_watch 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
    END AS your_alias, 
    ... 

검색의 경우 표현 :

SELECT 
    CASE WHEN queue_access.queue_watch = 0 THEN 'No' ELSE 'Yes' END AS your_alias, 
    ... 

아니면 MySQL의 특정 IF 구조 사용할 수 있습니다

SELECT 
    IF(queue_access.queue_watch, 'Yes', 'No') AS your_alias, 
    ... 

당신은 무엇을해야을 고려할 수를 값이 0 또는 1이 아닌 경우 발생합니다.

+0

@MarcusAdams : 죄송합니다. 실제로 추가 할 예정이었습니다. 나는 SQL Fiddle에서 내 대답을 테스트하고 있었지만 모든 것이 정상적으로 작동하는지 확인하기 위해 시도했지만, 놀랍게도 거기에서 작동하지 않았다. 구문을 잘못 기억했거나, 잘못 입력했거나, SQL Fiddle에 버그가 있는지 확실하지 않았습니다. SQL Fiddle의 버그 인 것 같습니다 (http://sqlfiddle.com/#!2/d41d8/711). –

+0

ANSI 표준 방식을 '사례'뿐만 아니라 간결한 MySQL 'IF'방식으로 보여주는 훌륭한 직장입니다. –

+0

나는 case ... as 메서드를 좋아하지만, 어디에서 case를 넣을 것인가, 나는 그것을 쿼리에 넣을 때 SQL 에러를 얻는다. –

관련 문제