2013-05-24 2 views
0

환상의 축구 팀을 보유한 데이터베이스가 있습니다. p1 = 팀의 선수 1, p2 = 선수 2 등 총 15 명의 선수에게. 모든 플레이어 이름은 팀을 구성하는 방식에 따라 p1-p15에 포함될 수 있습니다.mysql 쿼리가 예상대로 추가되지 않습니다.

누가 소유하고 있는지에 대한 보고서를 실행하려고합니다. 팀에서 얼마나 많은 사람들이 Will Johnson을 가지고 있는지 찾는 데 사용됩니다.

SELECT * FROM `players` 
    WHERE MATCH (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) 
    AGAINST ('Will Johnson' IN BOOLEAN MODE) 
    AND rank <= 100 

반환 51.

그런 다음이 코드를 사용하여 처음 11 개 (11 개 변수)에 얼마나 많은 사람이 있었는지 확인합니다.

SELECT * FROM `players` 
    WHERE MATCH (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) 
    AGAINST ('Will Johnson' IN BOOLEAN MODE) 
    AND rank <= 100 

반환 47.

은 그 때 나는 (지난 4 개 변수)

SELECT * FROM `players` 
    WHERE MATCH (p12, p13, p14, p15) 
    AGAINST ('Will Johnson' IN BOOLEAN MODE) 
    AND rank <= 100 

수익률 6 자신의 벤치에 그를 얼마나 많은 알이 코드를 않습니다.

그래서 ... 내 문제는 47 + 6 = 53가 51

어떤 생각을 총해야 때 이유 또는 내가이 문제를 해결할 수있는 방법인가?

+3

왜 다섯 개 필드를 사용해야합니까? 'WHERE position <= 11'을하는 것이 훨씬 쉽습니다. –

+1

데이터에 두 개의 '존슨 윌'이있을 수 있습니다. 'Will Johnson'을 여러 번 표시 할 수 있습니다. 내 생각 엔 결과가 좋고 데이터가 기대치를 충족시키지 못한다는 것입니다. –

+0

@GeorgeCummins 정보는 다른 웹 사이트에서 긁어 내고 데이터베이스 필드에 그대로 넣습니다. 나는 이것이 그것이 가장 이상적인 방법이 아니라는 것을 알고 있기 때문에 그것이 미래에 어떻게 작용 하는지를 바꿀 것이다. 나중에 각 플레이어마다 1 행을 넣을 것입니다. – Cully

답변

3

나는 Will Johnson이 두 단어이기 때문에 그것의 확신과 OR에 더 + 또는 - 운영자 및 기본값이 없기 때문에, 그것은 Will 또는 Johnson를 검색합니다. 이 문제를 해결하려면

, 당신은 단지`position` 열을 사용할 수있는 곳 ('"Will Johnson"' IN BOOLEAN MODE)

https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

+0

큰 감사 ... 이것은 바로 그 것입니다. 지금 나는 36 개의 합계, 3 개의 벤치, 33 개의 팀을 얻습니다. 그래서 숫자가 합쳐집니다. 같은 검색에서 "Will Johnson"과 "Ryan Johnson"을 선택했기 때문에 검색이 어떻게 작동하는지 분명히 알지 못했습니다. 감사합니다. – Cully

관련 문제