2014-03-27 4 views
1

특정 테이블에 저장된 값에 대해 조회 테이블에서 레이블을 가져 와서 가져 오는 기능이 있습니다. 1 개의 값이 있으면 올바르게 표시됩니다. 그러나 여러 값이있는 경우 첫 번째 값만 반환합니다. 예를 들어 :여러 값이있는 필드에 대해 여러 레이블 반환

Lookup table is 

| Tel_No| Tel_type | 
-------------------- 
| 1 | Info | 
| 2 | Support | 
| 3 | Call | 

Main table is 

| TelephoneCalls | 
------------------ 
| 1,3   | 
| 3    | 
| 1,2,3   | 

내가 한 값과 일치하는 작동 순간에이 기능은 나는 그것이

If 1, 3  then display  Info, Call 
If 3   display  Call 
If 1, 2, 3 display  Info, Support, Call 

아래 덕분에 같은 값을 나열 얻을 수있는 방법

function getMonitoring($monitoring){ 
$query = "SELECT Tel_type FROM TelephoneCalls Where Tel_no = '$monitoring'"; 
$result9 =mysql_query($query) or die(mysql_error()); 
list($Tel_type) = mysql_fetch_array($result9, MYSQL_NUM); 
    return $Tel_type; 
       } 

입니다 어떤 도움이라도!

+0

는 값이 TelephoneCalls' 실제로 쉼표 번호를 분리'에 저장됩니다? 왜냐하면 이걸 조금 더 어렵게하기 때문입니다. 별로 어렵지는 않지만 비효율적 인 이유는 단 한 번이 아닌 여러 번 쿼리해야하기 때문입니다. –

+0

예 모두 쉼표로 구분 된 숫자입니다. – 5ummer5

+0

그것은 세상의 끝이 아닙니다. 단지 표준이 아닙니다. 이 조회수에 적용되는 조회 값을 얻기 위해 다른 조회를 실행해야합니다. –

답변

1

나는이 주석을 만졌을 것으로 추측하지만 필드에서 CSV 값을 사용하는 것보다 다차원 관계가되도록 스키마를 변경해야합니다. 이 쿼리가 작동합니다 수없는 경우

SELECT telephonecalls, GROUP_CONCAT(tel_type) 
FROM lookup_table 
LEFT JOIN main_table ON FIND_IN_SET(tel_no , replace(TelephoneCalls,' ', '')) > 0 
GROUP BY telephonecalls; 

#outputs 
+----------------+------------------------+ 
| telephonecalls | GROUP_CONCAT(tel_type) | 
+----------------+------------------------+ 
| 1,2,3   | Info,Support,Call  | 
| 1,3   | Info,Call    | 
| 3    | Call     | 
+----------------+------------------------+ 

http://sqlfiddle.com/#!2/194fd/1/0

+0

필자는 oracle을 사용하여 find_in_set과 같은 내장 함수를 잊어 버렸습니다. 여전히 이상적은 아니지만 작동합니다. –

관련 문제