2014-11-06 5 views
-4

Извините, что я такой начинающий. Просто не могу опустить голову match() и against().MySQL match() против() - порядок по количеству баллов?

У меня есть набор из 10 переменных, в основном ответы из 10 вопросов. Я хочу сопоставить их с таблицей MYSQL и затем выбрать 5 наиболее релевантных результатов в порядке убывания.

Я также хочу показать процент оценки для каждого результата.

Переменные:

$a1 = y; 
$a2 = n; 
$a3 = n; 
$a5 = y; 
. 
. 
. 
$a10 = n; 

Моя структура таблицы что-то вроде этого:

PERSON_NAME, AGE, A1, A2, A3, A5... A10

Результаты, которые я хочу быть проявлением, как это:

Питер Смит (100%)

Jane Grey (65% матч)

Джилл Сандерс (30% совпадение)

Почему это не работает?

Вот мой код:

$query = "SELECT *, MATCH($a1,$a2,$a3, $a4,$a5,$a6,$a6,$a7,$a8,$a9,$a10) AGAINST('A1, A2, A3, A4, A5, A6, A7, A8, A9, A10') AS score FROM table_name WHERE MATCH($a1,$a2,$a3, $a4,$a5,$a6,$a6,$a7,$a8,$a9,$a10) AGAINST('A1, A2, A3, A4, A5, A6, A7, A8, A9, A10') ORDER BY SCORE DESC"; 

$result = mysql_query($query); 
$row = mysql_fetch_assoc($result); 
--------- 
$max_score = 0; 
$data = array(); 

do { 
    if ($row['score'] > $max_score) { 
     $max_score = $row['score']; 
    } 
    echo $row['PERSON_NAME']." "[email protected]_format(($row['score']/$max_score)*100,0)."%<br>n"; 
} while ($row = mysql_fetch_assoc($result)); 
+1

«Будет ли этот запрос работать?» Почему бы вам не попробовать? :) – thatidiotguy

+3

^^^ избили меня ^^^ –

+2

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – esqew

ответ

0

Вы, кажется, делает поиск в обратном направлении. Синтаксис

SELECT ... MATCH (field1, field2, ... , field N) AGAINST ('search string') 

Вы делаете то, что, как представляется, эквивалент

SELECT ... MATCH(y, n, y, y, ....) AGAINST ('field2 field2 ... fieldN') 

Поскольку вы вряд ли есть поля, названные y и n в вашей таблице, вы в конечном итоге с синтаксическая ошибка mysql из-за неизвестных/несуществующих полей.

Если вы имели даже МИНИМАЛЬНЫЙ обработку ошибок в сценарии, такие как

$result = mysql_query($sql) or die(mysql_error()); 
          ^^^^^^^^^^^^^^^^^^^^^^ 

вы бы сказали об ошибках. NEVER принять успех. Всегда принимайте неудачу и относитесь к успеху как к приятному удивлению.

Смежные вопросы