2014-09-24 3 views
0

) title, url_title, categories를 가져 오는 MYSQL 쿼리를 작성하려고 시도하고 있으며 category 열의 값에 따라 값이있는 URL 필드도 설정합니다.조건부 MySQL 쿼리 (

내가해야 할 일은 카테고리 열에 카테고리 10이 포함되어 있으면 url_title을 첨부하여 URL 열의 값을 http://www.mydomain.tld으로 설정하고 파이프로 구분 된 카테고리 열 (예 : 10 | 122 | 40 | 187)을 확인해야합니다. , 40,80 그 밖의 카테고리에 해당 카테고리가 없으면 URL을 http://www.mydomain2.tld으로 url_title을 추가하여 설정하십시오.

아래 조건을 사용하려고했지만 분명히 잘못하고 있습니다.

SELECT exp_channel_data.entry_id AS entry_id, exp_channel_titles.title AS title, exp_channel_titles.url_title AS url_title, GROUP_CONCAT(cp.cat_id SEPARATOR '|') AS categories, 
    IF('122,123,124,125,126,127,128,129,130,131,132,187' IN categories, 
    (CONCAT('http://www.mydomain.tld',url_title AS 'URL')), 
    (CONCAT('http://www.mydomain2.tld',url_title AS 'URL')) 
) 
FROM data 
FROM exp_channel_data 
LEFT JOIN exp_channel_titles ON exp_channel_titles.entry_id = exp_channel_data.entry_id 
LEFT JOIN exp_category_posts AS cp ON exp_channel_data.entry_id = cp.entry_id 

다음은 테이블 구조입니다.

exp_channel_data 
------------- 
entry_id int 10 

exp_channel_titles 
------------- 
entry_id int 10 
title varchar 100 
url_title varchar 100 

exp_category_posts [this is the junction table that has been referred to] 
------------- 
entry_id int 10 
cat_id int 10 

나는 모든 조언에 감사드립니다.

업데이트 : 사용중인 쿼리로 업데이트했습니다. 나는 그 질문을 단순화하려고 노력했지만 이것이 바 디데아라는 것을 깨달았다. 위의 테이블 구조도 포함 시켰습니다. 당신이 형편없는 데이터 구조를 가지고 있기 때문에

+1

구분 된 목록을 열에 저장하지 마십시오. 관계형 데이터베이스는 목록을 저장하기위한 훌륭한 데이터 형식을 가지고 있습니다. 이 테이블의 테이블, 특히이 경우 접합점 테이블이라고합니다. –

+0

젠장, 나는 틀린 URL을 붙여 넣었다. 나는 의미 : 가능한 복제 [어떻게 MySQL의 위치 순서에 관계없이 쉼표의 문자열을 일치시킬 수 있습니다] (http://stackoverflow.com/questions/25887713/how-can-match-a-string-of-comma 분리 된 - 관계없이 - 주문 순위/25887934 # 25887934). – GolezTrol

+0

죄송합니다. 범주를 파이프로 구분하여 저장하지 않도록 추가해야합니다. 내 쿼리에서 이들을 하나의 필드로 연결했습니다. – doubleplusgood

답변

0

, 당신은 오히려 무차별 접근 방식으로이 작업을 수행해야한다 : 당신은 종류와 개체 당 하나의 행으로, 접합 테이블에 카테고리를 저장해야

select title, url_title, categories, 
     (case when find_in_set(122, replace(categories, '|', ',')) > 0 or 
        find_in_set(123, replace(categories, '|', ',')) > 0 or 
        . . . 
        find_in_set(187, replace(categories, '|', ',')) > 0 
      then CONCAT('http://www.mydomain.tld', url_title AS 'URL') 
      else CONCAT('http://www.mydomain2.tld', url_title AS 'URL') 
     end) 
FROM data; 

.