2014-06-21 1 views
0

데이터베이스에 foodtype이라는 컬럼이 있습니다. 테이블 이름은 레스토랑이고 열 foodtype은 쉼표로 구분 된 값 (인도어, 중국어)을 갖습니다.같이 commaseparated mySQL 컬럼 값을 사용하십시오

사람이 중국인을 선택하면 mysql 쿼리는 foodtype이 중국어 인 식당을 반환해야합니다.

쿼리는 다음과 같이되어 있어야합니다 사람이 다음 내가 foodtype 인도입니다 MySQL은 쿼리 레스토랑을 반환해야 할 인도를 선택

SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype 
LIKE ('%Chinese%') 

때.

쿼리가 아래와 같이되어 있어야

:

SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype 
LIKE ('%Indian%') 

을 그리고 사람이 인도와 중국을 선택하면 모두 다음 내가 foodtype는 인도와 중국입니다 식당을 반환해야합니다 MySQL의 쿼리를합니다.

쿼리는 다음과 같이되어 있어야합니다

SELECT * FROM restaurant WHERE cityname='Chicago' and foodtype 
LIKE ('%Indian%,%Chinese%') 

날 내가이를 수있는 방법을 알려 주시기 바랍니다.

+3

처럼 모두 foodtypes를 가지고 선택할 수 있습니다

당신이 당신의 DB에

foodtypes table --------------- id name restaurant_foodtypes -------------------- restaurant_id foodtype_id 

예 데이터를이 개 다른 테이블을 추가 할 수 있음을 달성하기 위해 대신 데이터베이스 디자인을 수정해야합니다. 다른 테이블을 사용하여 foodtypes를 저장하는 것은 join을 사용하여 쿼리하는 것입니다. – PeeHaa

답변

1

사용 FIND_IN_SET()

SELECT * 
FROM restaurant 
WHERE cityname='Chicago' 
and find_in_set(foodtype, 'Indian') > 0 
and find_in_set(foodtype, 'Chinese') > 0 

그러나 실제로 당신이 당신의 테이블 구조를 chaning에 의해 더 낫다. 결코 한 번에 여러 값을 저장하지 마십시오!

foodtypes 
id | name 
1 | chinese 
2 | indian 

restaurant_foodtypes 
restanrant_id | foodtype_id 
1    | 1 
1    | 2 

그런 다음 당신이 레스토랑은 정말이

select r.name 
from restaurants r 
join restaurant_foodtypes rf on rf.restaurant_id = r.id 
join foodtypes f on rf.foodtype_id = f.id 
where f.name in ('indian','chinese') 
group by r.name 
having count(distinct f.name) = 2 
+0

'FIND_IN_SET()'이 (가) 검색 쿼리의 속도를 늦추지 않습니까? – Gags

+0

한 레스토랑에 대해 여러 가지 foodtype 값을 저장하는 방법을 알려주십시오. – Gags

+0

인덱스를 사용할 수없는'LIKE '%'를 사용하는 것 이상은 사용하지 마십시오. 그래서 당신이 테이블 구조를 변경해야합니다 –