2011-11-23 5 views
0

검색시 문제가 있습니다. 나는 classDetails 테이블을 가지고 있고 className, classNumber, classSubject를 가지고있다. 이제 클래스 이름에 몇 가지 데이터 세트가 있습니다. 컴퓨터 과학, mec, 전기, 등등 .. 수업 주제에 데이터가 될 것입니다. IT, EEE, MEC 등 ... 클래스 번호는 데이터가 비슷합니다. 사용자 그들이 (233), 또는 EEE (12) 등처럼 검색하는 데 사용되는 테이블을 검색하면이 ... 내가 좋아하는 많은 옵션을 시도에서 233, 3213은, 12, 등 ..테이블에서 문자열과 숫자를 검색하십시오.

SELECT * FROM classes_detail 
WHERE classDeleted = 0 AND 
( 
    LOWER(classCollege) LIKE "%'. trim($searchTxt). '%" OR 
    classNumber LIKE "%'. trim($searchTxt). '%" OR 
    CONCAT(classNumber , LOWER(classCollege)) LIKE "%'. trim($searchTxt). '%" 
) 

어느 한 나에게를 찾을 수 있습니다 이 가장 검색어 ..

답변

1

당신은

SELECT * FROM classes_detail 
WHERE classDeleted = 0 
    AND LOWER(CONCAT_WS(' ',subject,class_num)) = LOWER(your_param) 

을 시도 할 수 또는

SELECT * FROM classes_detail 
WHERE classDeleted = 0 
    AND (LOWER(CONCAT_WS(' ', subject, class_num)) = LOWER(your_param) 
    OR LOWER(subject) = LOWER(your_param) 
    OR LOWER(class_num) = LOWER(your_param)) 
+0

그러면 사용자가 올바른 순서와 전체 문자열로 검색어를 검색 한 결과 만 표시됩니다. 예를 들어 코스 "EEE 12"의 경우 "12"또는 "EEE"만 검색하면 해당 결과를 찾을 수 없습니다. – liquorvicar

+0

@liquorvicar : 내 편집 된 답변이 더 마음에 드십니까? – Marco

+0

더 나은 방법이지만, 실제로 OP를 다른 자유 텍스트 검색 옵션으로 안내하는 것이 최선이라고 생각합니다. 실제로 자유 텍스트 검색이 필요한 경우에 선택하십시오. 그/그의 사용자는 완전한 자유 텍스트 검색을 필요로하지 않을 수도 있습니다. – liquorvicar

0

무료 텍스트 시든를 (좀 더 자유로운 텍스트를 검색하는) 칭 (ching)은 거대한 주제입니다 (Google에 문의하십시오!). 귀하의 데이터가 구조가 잘 정돈되어 있고 비교적 작다면 (예 : 클래스 주제가 거의 변경되지 않는 IT, EEE, MEC와 같은 5-10 가지 옵션 만 가지고있는 경우) 사용자를위한 검색 옵션을 구체화하여 명시 적으로해야 할 수도 있습니다 그들이 찾고있는 것을 선택하십시오.

MySQL's full-text searching options을 조사 할 수도 있습니다. 또는 Lucene과 같은 독립 실행 형 솔루션을 한 번 더 살펴보고 싶을 수도 있습니다.이 옵션은 하나의 옵션으로 더 많은로드가 있습니다.

모두 맞는 크기가 하나도 없습니다. 그것은 모두 귀하의 데이터가 구조화되고 사용자가 원하는 것이 무엇인지에 달려 있습니다.

관련 문제