2010-07-07 9 views
2

여기에 약간의 레거시 데이터베이스를 다루고 있으며 검색 쿼리 작성에 약간의 문제가 있습니다.선택할 때 MySQL이 열에 연결됩니다.

해당 테이블 두 개는 productstours (제품 당 다중)입니다.

내 일반 질의는 다음과 같습니다

SELECT products.*, tours.* FROM products INNER JOIN tours 
ON products.id=tours.product_id 
GROUP BY products.id 

지금 여기에 내가 문제가있어 부분입니다. products 테이블에 countries 열이 포함되어 있습니다.이 ID는 파이프로 구분 된 국가 ID 목록입니다 (예 : 13|45|33|29|133|337). 예를 들어, 나라가 33products의 목록을 반환해야합니다.

간단히하기 위해 where products.countries LIKE '%33%'을 할 수 있지만 133337도 반환합니다. where products.countries LIKE '%|33|%'을 사용해야합니다. 처음 또는 마지막 인 경우 일치하지 않습니다.

SELECT products.*, tours.*, CONCAT("|",products.countries,"|") AS country_list 
FROM products INNER JOIN tours ON products.id=tours.product_id 
GROUP BY products.id 

을 내가 WHERE country_list LIKE '|%33%|'을 추가하려고한다면, 내가 "undefined index: country_list" 오류 ..

를 얻을 : 따라서, 내가 좋아하는 뭔가 나에게 잎 선택 열 값의 한쪽 끝을 파이프를 추가 할 필요가

여기서 내가 뭘 잘못하고 있니?

+0

WHERE products.countries LIKE '% 33 %', – helle

+0

@helle 또한 '133'과 '337'과 일치합니다. 잘못된 것입니다 – Jeriko

답변

3

별칭 내에 WHERE 절에서 availible하지

WHERE CONCAT("|",products.countries,"|") LIKE '%|33|%' 

참고. 그냥 절

을 HAVING에 "별명은 컬럼에 다른 이름을 지정하는 쿼리 선택 목록에서 사용할 수 있습니다. 당신은 열을 참조 할 HAVING 절 GROUP BY, ORDER BY에있는 별칭을 사용하거나 할 수 있습니다"1

그래서 당신도 스콧 게시 것으로,

HAVING country_list LIKE '|%33%|' 

또는 별칭없이 satement

을 할 수 있습니다.

+0

감사. 나는 Scott의 해결책을 사용했는데, 나는 이것이 질문에 가장 잘 대답한다고 생각하기 때문에 이것을 받아 들인다. – Jeriko

5

당신은 사용할 수 있습니다 파이프는 퍼센트 기호

+0

WHERE 절에서 별칭을 참조 할 수 없습니다. , 너는 할수 있니? – MJB

+0

훌륭합니다. 오류에 대한 설명과 왜 그것을 선택할 수 없습니까? – Jeriko

관련 문제