2009-09-02 3 views
1

고객 데이터 (예 : 고객 이름, 고객 담당자 이름, 고객 서비스 품목 등)가있는 여러 개의 테이블이 있습니다.여러 기준 검색

테이블에서 여러 열을 검색 할 수 있도록 설정해야합니다. 그런 다음 검색 결과를 사용하여 고객 정보를 가져와야합니다 (고객 ID 또는 고객 이름 필요).

가장 좋은 방법은 무엇입니까?

가능한 해결책 :

  1. 제공 여러 개의 필터 (다른 검색 상자), 다음 개별적으로 각 결과를 처리 할 수 ​​있습니다. (클라이언트가이를 선호하지 않고 하나의 상자에 넣기를 원합니다.)
  2. 임시 테이블 (CustomerID, 검색 필드 값)을 만듭니다.
  3. 색인 만들기!?
  4. 사용자 내부 조인 및 검색 결과를 처리 할 논리 넣기 !!!!

감사합니다.

+0

검색 어떤 종류의 당신을 당신이 할 경우, 당신이 정렬 orderthat을 maintining하는 것은 의미가있는 동안 정확한 일치를 보장하기 위해이 양식에 쿼리를 작성하는 것이 좋습니다 필요? 사용자가 검색해야 할 테이블의 필드를 식별합니까, 아니면 모든 테이블의 모든 필드에 있는지를 식별합니까? 검색이 적용되는 날짜의 범위를 제한하는 현명한 방법이 있습니까? Column1의 기준을 화면의 한 필드에 입력하고 Column2의 기준을 다른 필드에 입력하면 융통성을 제공 할 수 있습니다 (SQL을 조심할 경우 성능). 검색 기준이 단일 필드에서 스머필되면 다른 기준을 풀어 내고 적용 할 열을 결정하는 것이 훨씬 어렵습니다. –

+0

내가 사용하는 시스템 중 하나는 Table1.Column1 열의 필드에 사용자가 '15 : 30 '을 입력하면 생성 된 문자열에'Table1.Column1 BETWEEN 15 AND 30 '; 이것은 동적으로 생성 된 SELECT 문의 WHERE 절에 포함될 수 있습니다. 문자열 일치와 같은 와일드 카드 등 더 복잡한 조건도 작성할 수 있습니다. 오픈 소스 구현에 대해서는 잘 모릅니다. 그것은 생산하기가 무섭지가 않겠지 만 사소하지는 않습니다. 그냥 생각 ... –

답변

0

시도 뭔가 같은 :

SELECT 
    c.* 
    FROM CustomerTable c 
     INNER JOIN (SELECT 
         CustomerID 
         FROM Table1 
         WHERE columnA =filter1 
        UNION 
        SELECT 
         CustomerID 
         FROM Table2 
         WHERE columnB =filter2 
        UNION 
        SELECT 
         CustomerID 
         FROM Table3 
         WHERE columnC =filter3 
        ) dt ON c.CustomerID=dt.CustomerID 
0

http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

나는 "구글 - likish", 더 지능적인 검색을 할 수 있도록 오라클 애플리케이션에 사용되는 오라클 텍스트 검색 등이 비슷한 생각합니까.

따라서 전체 텍스트 색인입니다.

내부 조인을 사용하면 (또는 더 나쁜 경우 임시 테이블에서 내용을 복사하는 경우) 일 수도 있지만 코드가 복잡해지며 성능이 저하 될 수 있습니다.

0

고객이 이와 같이 작동하는 검색을 원할 경우 할 수있는 유일한 일은 TEXT 열을 작성하고 FULLTEXT 색인을 생성 한 다음 검색하려는 모든 열을이 열에 연결하는 것입니다.

select * 
    from sometable 
where match(search_column) against('$search_terms' in boolean mode) 
order 
    by match(search_column) against('$search_terms')