2014-11-17 1 views
0

내 쿼리는 다음과 같습니다 경우에만 라운드 수에 원치 :MySQL의 - 반올림 (일종의) - 이상/이하 10

SELECT id, name, 
MATCH (name) AGAINST (%serach term%) as relevance, 
address 
FROM table 

내가 이르기까지 관련 결과를 얻고 5.1 및 14.0 betweeen. 관련성에 따라 정렬하고 싶지만 다른 필드에서도 정렬하고 싶습니다. 그래서 관련성을 약간 반올림하고 싶습니다.

SELECT id, name, 
round(MATCH (name) AGAINST (%serach term%),0) as relevance, 
address 
FROM table 

이 그것을 가장 가까운 정수로 반올림 :

나는 다음과 같은 작업 뭔가있어.

그러나 이상적으로 나는 10보다 높고 10보다 작고 유일한 구별 요소가 무엇인지 알고 싶습니다.

그래서 : 1, 5.1, 9.9 그리고 10 모든 '라운드', 10.1, 14.1, 20

또는 모든 '라운드'는 0과 1 또는 0과 10이 될 수 것이다 것 또는 0과 20입니다.

나는 이것에 대해 어떻게 생각하는지, 심지어 가능할 지 모르겠습니다. 나는 천장()과 둥근()을보고 있었지만 나는 그것을 알아낼 수 없다.

답변

0

이 작동하는 것 같다

SELECT id, name, 
CASE WHEN MATCH (name) AGAINST (%serach term%) <= 10 THEN 10 
    WHEN MATCH (name) AGAINST (%serach term%) > 10 THEN 20 
    END as relevance, 
address 
FROM table 
+0

시도 사례, 감사합니다. 나는 궁금해하고 있어요 -이게 2x 작업 일치라고 생각합니까? 큰 데이터베이스의 쿼리에서 성능 손실이 발생합니까? – Kevin

+0

MySQL 옵티마이 저는 매치를 한 번만 실행해야하지만 솔직히 말해서 MyISAM에 익숙하지 않아서 더 이상 100 %를 말하지 않습니다. 이름에 대한 전체 텍스트 색인이 있습니까? 검사하고 공유 한 것을 마음에 드십니까? 나는 MyISAM을 오래 사용하지 못했다. 확실하지는 않다. (단 한번의 일치를 기대한다.) – evanv

+0

나는 이것이 실제로 캐싱에 의해 처리 될 것이라고 기대한다. EXTENDED EXTENDED를 앞에 두는 것이 좋을까? (검색어가있는 경우와없는 경우 모두). 또한 느린 쿼리 로그를 사용하도록 설정 했습니까? – evanv