2010-05-16 6 views
3

하나의 DB에 2 개의 테이블이 있는데 하나는 Cottages라고하고 다른 하나는 호텔이라고합니다. 두 테이블 모두 동일한 이름의 필드가 있습니다.2 테이블에서 2 열의 PHP mysql 검색

기본적으로 두 테이블의 필드를 모두 검색 할 수있는 검색 표시 줄이 있습니다. (두 개의 필드는 "이름"과 "위치"

지금까지 내가

$sql = mysql_query("SELECT * FROM Cottages WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 0, 30"); 

을 가지고 있지만 이것은 단지 나는 그것이 오두막 호텔 테이블을 모두 검색 할 수있는 방법은 코티지 테이블을 검색 호출되는?

당신은 단지 하나에 두 테이블을 병합하고 각 레코드를 identiy하기 ( 별장 또는 호텔 같은 값으로) type 같은 새 필드를 추가하는 경우

답변

3

는 더 좋을 것이다.

그걸 normalization이라고하며, WordPress가 게시물, 카테고리, 첨부 파일 및 페이지를 하위 데이터베이스 테이블에 저장할 때 정확하게 수행합니다.

+0

+1 훌륭한 조언. –

1

TiuTalk의 대답은 맞습니다. 두 테이블에서 열이 같으면이 데이터에 대해 하나의 테이블 만 사용하고 유형 열을 추가해야합니다.

또한 LIKE '%foo%'을 사용하면 속도가 느립니다. 당신은 full text search을 조사해야합니다. 또한 LIKE와 동일한 방식으로 여러 테이블을 처리하며 관련성별로 정렬 할 수 있습니다. 관련성을 기준으로 정렬 할 때 가장 관련성 높은 행을 가장 먼저 가져옵니다.

당신은 당신의 디자인을 변경할 수 없습니다 당신은 정확하게 각 테이블에서 절반 결과는 별도로 각을 조회 할 수 있습니다 결과 결합 ALL UNION을 사용 얻고 싶다면 : 열이 있어야합니다 분명히

(SELECT * FROM Cottages WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 15) 
UNION ALL 
(SELECT * FROM Hotels WHERE Name LIKE '%$term%' or Location LIKE '%$term%' LIMIT 15) 

을 이 두 테이블에서 동일하게 작동합니다. SELECT *을 사용하지 마십시오. 명시 적으로 열 이름을 나열해야합니다. 그렇지 않으면 열 순서를 바꾸면이 쿼리가 중단 될 수 있습니다.

관련 문제