полнотекстовый запрос в joomla

Как создать полнотекстовый поисковый запрос с объектами joomla. Я пытался, но это не работает

   $db = JFactory::getDBO();
        $query = $db->getQuery(true);
        $query->select('*');
        $query->from('#__unis_subjects AS s');
        $query->join('', '#__unis AS u ON s.university = u.id');
        $query->join('', '#__unis_faculties AS f ON f.id = s.faculty');
        $query->where('MATCH (s.subject) AGAINST ("' . $query . '")');

        if (!$db->query()) {
            throw new Exception($db->getErrorMsg());
        }

        $data = $db->loadObjectList();

        var_dump($query);

результат выводит параметры конфигурации шаблона


person fefe    schedule 29.07.2013    source источник
comment
Вы когда-нибудь догадывались об этом? Вы могли бы помочь многим другим, опубликовав свое решение здесь — вы один из лучших результатов для этого поиска...   -  person JxAxMxIxN    schedule 20.01.2015


Ответы (2)


Ваша таблица должна быть настроена с использованием ENGINE = MyISAM (не InnoDB), а столбцы, которые вы ищете, должны быть настроены на индексацию FULLTEXT.

Вы можете легко настроить свою таблицу на MyISAM в phpMyAdmin через вкладку "SQL"...

ALTER TABLE `tablename` ENGINE=MYISAM;

В Joomla 2.5+ (скорее всего, и 3+) в моем запросе в качестве предложения where я использовал...

->where('MATCH ('.$db->quoteName('columnname').') AGAINST ('.$db->quote($words_or_phrase_to_search_for).')');

Предстоит дальнейшее тестирование, но пока все работает, как и ожидалось.

person JxAxMxIxN    schedule 20.01.2015
comment
Конечно, для $db — он настроен как $db = JFactory::getDbo(); Использовались все стандартные стандарты выбора запросов Joomla... $query = $db->getQuery(true); а затем $query->select(array('*'))->from('#__some_table')->[вставьте мое предложение where выше здесь] - person JxAxMxIxN; 20.01.2015
comment
Вы также можете использовать несколько имен столбцов для поиска в части ПОИСКПОЗ, если вы того пожелаете (возможно, вы хотите выполнить поиск как по заголовку, так и по описанию, например), но вам придется настроить его с помощью , чтобы отделить имя каждого столбца . Удачи! - person JxAxMxIxN; 20.01.2015

Мне странным кажется $query внутри условия where.

person Glasnhost    schedule 16.05.2014
comment
Это полнотекстовый поиск, и, насколько мне известно, таблица должна быть установлена ​​в ENGINE = MyISAM (не InnoDB), а столбцы, в которых вы будете выполнять поиск, также должны быть настроены на прием полнотекстовых поисков. Это то, что у меня есть до сих пор... -›where('MATCH ('.$db-›quote('name').') AGAINST ('.$db-›quote($title).')') ; Я ничего не получаю обратно, значит, я сам что-то делаю не так (возможно, я что-то упустил в настройке стола). Glasnhost, вам, вероятно, следовало добавить комментарий вместо фактического ответа с ответом, подобным тому, который вы дали. - person JxAxMxIxN; 20.01.2015