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

Тема в разделе "PHP", создана пользователем Bobrov, 5 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Bobrov

    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
    {
    Ничего нет....
    }
    Пока результат всегда один, ничего нет хотя я пробую запросы результат которых должен быть положительным???
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    может именно сам запрос не проходит?
    попробуйте вывести
    PHP:
    echo mysql_errno() . ": " mysql_error(). "\n";
    также выведите само тело запроса, и попробуйте его вбить в phpMyAdmin, и посмотрите что там возвращается
     
  3. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    попробуй
    PHP:
    SELECT titlegood_descr FROM " . PREFIX . "_shop WHERE good_descr like '%".$story."%'
    Это выдвст все записи где есть $story..
     
    Bobrov нравится это.
  4. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    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 ) != )
    {
    ....
    }
    else
    {
    Опять ничего....
    }
    3. Покажи нам результат для дальнейшего анализа.
     
  5. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    В чем приемущество MATCH(good_descr) AGAINST ('$story') ???
     
  6. Bobrov

    Bobrov Постоялец

    Регистр.:
    7 авг 2008
    Сообщения:
    145
    Симпатии:
    13
    скобки после матч нужны если несколько значений, лайк уже пробовал, ошибок не выдает, фуллтекст стоит, потому и спросил, что хрень не понятная.
     
  7. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    afonya09,вы водной из соседних тем отписывались что вы админите БД.
    странно, что вы не знаете про FULLTEXT индексы

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

    Bobrov Постоялец

    Регистр.:
    7 авг 2008
    Сообщения:
    145
    Симпатии:
    13
    то, что вы ищете в поле обрамлено пробелами, для того чтобы FULLTEXT считал его "словом"?

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

    Добавлено через 4 минуты
    Огромное спасибо, заработало именно так, если объясните почеуму буду благодарен!
     
  9. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    FULLTEXT ищет не по любым подстрокам, а по словам естественного языка.
    причем на данный момент он заточен только под английский язык.
    как вывод строка
    Код:
    автоэлектропропеллер
    не будет найден по запросу
    Код:
    MATCH good_descr AGAINST ('пропелер')
    по поводу же LIKE-а:
    этот оператор поддерживает символы подстановки
    символ % обозначает любое количество любых символов.
    то есть этот запрос ищет подстроку.
    но пользоватся им не стоит, так как грузит БД сильно.
    ему приходится загрузить каждую строку, и проверить ее в данном случае.
    подроьнее в оф-справке
     
    Bobrov нравится это.
  10. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Я хочу напомнить, что полнотекстовые индексы в могут быть созданы в таблицах 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
     
Статус темы:
Закрыта.