Не работает поиск по базе данных

Статус
В этой теме нельзя размещать новые ответы.

Bobrov

Постоялец
Регистрация
7 Авг 2008
Сообщения
145
Реакции
13
Подскажите что может быть не так, выполняю запрос
Код:
$search_result = $db->query ( "SELECT title, good_descr FROM " . PREFIX . "_shop WHERE MATCH good_descr AGAINST ('$story')");
			

if ( $db->num_rows ( $search_result ) != 0 )
{
....
}
else
{
Ничего нет....
}
Пока результат всегда один, ничего нет хотя я пробую запросы результат которых должен быть положительным???
 
может именно сам запрос не проходит?
попробуйте вывести
PHP:
echo mysql_errno() . ": " . mysql_error(). "\n";
также выведите само тело запроса, и попробуйте его вбить в phpMyAdmin, и посмотрите что там возвращается
 
попробуй
PHP:
SELECT title, good_descr FROM " . PREFIX . "_shop WHERE good_descr like '%".$story."%'

Это выдвст все записи где есть $story..
 
1) поставь круглые скобки после оператора MATCH:

PHP:
$search_result = $db->query ( "SELECT title, good_descr FROM " . PREFIX . "_shop WHERE MATCH(good_descr) AGAINST ('$story')");

2) Вставь вывод отладочной информации, как это советовал Alternator:

PHP:
$query = "SELECT title, good_descr FROM " . PREFIX . "_shop WHERE MATCH(good_descr) AGAINST ('$story')";
$search_result = $db->query ($query);
			
echo "query=$query<br>";
echo 'Error ' . mysql_errno() . ": " . mysql_error(). "<br>";  

if ( $db->num_rows ( $search_result ) != 0 )
{
....
}
else
{
Опять ничего....
}

3. Покажи нам результат для дальнейшего анализа.
 
В чем приемущество MATCH(good_descr) AGAINST ('$story') ???
 
скобки после матч нужны если несколько значений, лайк уже пробовал, ошибок не выдает, фуллтекст стоит, потому и спросил, что хрень не понятная.
 
afonya09,вы водной из соседних тем отписывались что вы админите БД.
странно, что вы не знаете про FULLTEXT индексы

Bobrov, попробуйте все же со скобками.
насколько я понял из докментации они являются обязательными даже для одного поля
также попробуйте провериь таблицу, и пересоздать FULLTEXT-Индекс
в конце-концов, FULLTEXT Инструмент неточного релевантного поиска.
то, что вы ищете в поле обрамлено пробелами, для того чтобы FULLTEXT считал его "словом"?
 
afonya09,вы водной из соседних тем отписывались что вы админите БД.
странно, что вы не знаете про FULLTEXT индексы

Bobrov, попробуйте все же со скобками.
насколько я понял из докментации они являются обязательными даже для одного поля
также попробуйте провериь таблицу, и пересоздать FULLTEXT-Индекс
в конце-концов, FULLTEXT Инструмент неточного релевантного поиска.
то, что вы ищете в поле обрамлено пробелами, для того чтобы FULLTEXT считал его "словом"?

то, что вы ищете в поле обрамлено пробелами, для того чтобы FULLTEXT считал его "словом"?

Вот это по подробнее, либо я не понял о чем речь... запросы чищу и после чистки вывожу чтоб видеть, что ищется по базе, FULLTEXT пересоздавал, может быть проблема из-за цмс, ее родной поиск использовал LIKE, но даже с ним результат нулевой. Пробовал со скобками и без - результат одинаковый.

Добавлено через 4 минуты
попробуй
PHP:
SELECT title, good_descr FROM " . PREFIX . "_shop WHERE good_descr like '%".$story."%'

Это выдвст все записи где есть $story..

Огромное спасибо, заработало именно так, если объясните почеуму буду благодарен!
 
FULLTEXT ищет не по любым подстрокам, а по словам естественного языка.
причем на данный момент он заточен только под английский язык.
как вывод строка
Код:
автоэлектропропеллер
не будет найден по запросу
Код:
MATCH good_descr AGAINST ('пропелер')

по поводу же LIKE-а:
этот оператор поддерживает символы подстановки
символ % обозначает любое количество любых символов.
то есть этот запрос ищет подстроку.
но пользоватся им не стоит, так как грузит БД сильно.
ему приходится загрузить каждую строку, и проверить ее в данном случае.
подроьнее в оф-справке
 
Я хочу напомнить, что полнотекстовые индексы в могут быть созданы в таблицах MyISAM, в столбцах типа VARCHAR и TEXT.

В строке
PHP:
$query = "SELECT title, good_descr FROM " . PREFIX . "_shop WHERE MATCH(good_descr) AGAINST ('$story')";

Выбирает для поиска поля title, good_descr а ищет по полю - good_descr.

Лучше использовать поиск в логическом режиме, типа
PHP:
$query = "SELECT title, good_descr FROM " . PREFIX . "_shop WHERE MATCH(title, good_descr) AGAINST ('$story' IN BOOLEAN MODE)";

title, good_descr с индексом FULLTEXT
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху