mysql — PHP полнотекстовый поиск не работает должным образом

Я запрашиваю данные для очистки моего столбца базы данных на основе ключевых слов, введенных пользователем.

Предположим, если пользователь хочет искать почтовый индекс и типы 114 поэтому наш сценарий должен получить результаты, имеющие zip из поля zip базы данных, означающие сопоставление с образцом или что я не уверен, затем, если пользователь захочет запросить адрес и введет желаемый адрес, наша система должна найти адрес из поля адреса базы данных.

Код, который я использую:

$test       =   $_REQUEST['keyword'];

echo $query_rsTest = "SELECT zip, ste, st, st_num, town, addr, st_sfx,
MATCH (zip, ste, st, st_num, town, addr, st_sfx) against('*$test*' IN BOOLEAN MODE) as relevance
FROM
tbl_property
WHERE MATCH (zip, ste, st, st_num, town, addr, st_sfx) against('*$test*' IN BOOLEAN MODE) order by relevance desc limit 0,5";

$rsTest = mysql_query($query_rsTest) or die(mysql_error());
$row_rsTest = mysql_fetch_assoc($rsTest);

if  (isset($row_rsTest['zip'])) {?>
<div id='fetchRecs'><ul>
<?php
while($row = mysql_fetch_array($rsTest)) {
echo '<li><a href="#">'.$row['zip'].'</a></li>';
}
?>
</ul></div>
<?php } elseif (isset($row_rsTest['ste'])){?>
<div id='fetchRecs'><ul>
<?php
while($row = mysql_fetch_array($rsTest)) {
echo '<li><a href="#">'.$row['ste'].'</a></li>';
}
?>
</ul></div>
<?php }

Вот моя структура таблицы и примеры записей.

введите описание изображения здесь

Я просто хочу, чтобы пользователь получил точный результат на основе своего запроса из базы данных. Означает, что мы можем фильтровать столбцы базы данных, например, пользователь вводит какое-то ключевое слово «бла-бла», поэтому мы должны сопоставить его и запросить соответствующий столбец только для результатов из столбца «бла-бла».

Благодарю.

1

Решение

Пожалуйста предоставьте SHOW CREATE TABLE tbl_property;

Находясь в поиске 114 поскольку префикс к почтовому индексу должен быть сделан следующим образом:
WHERE zip LIKE '114%не с FULLTEXT.

По умолчанию в MyISAM используется FULLTEXT с минимальным размером слова 4 (это можно изменить, но требуется перестроить индекс). FULLTEXT InnoDB ничего не найдет, если вы передадите ему слово, которое короче его минимального размера (по умолчанию 3). Итак, отфильтруйте короткие слова.

Не используйте ведущий «*» ПРОТИВ, который не работает. Даже использование конечного «*» имеет проблемы в вашем примере — обратите внимание, что «* point Приятный *» означает «Ищите слова, заканчивающиеся на« point », и слова, начинающиеся с« приятного ». Опять же, вам нужно помассировать входящий запрос.

Предложите вам разобрать входящий запрос, сделать умные предположения о том, что запрашивает пользователь (например, 114 — это 3-значный почтовый индекс; 114 плюс что-то еще может быть адресом). Узнайте о «регулярных выражениях», они вам понадобятся.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]