Проблемы сопоставления индекса FULLTEXT с CodeIgniter Query Builder - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь создать индексацию полнотекстового поиска на основе построителя запросов CodeIgniter, и я получил странный результат, который гласит:

Error Number: 1191</p><p>Can't find FULLTEXT index matching the column list</p><p>SELECT *
FROM `posts`
LEFT JOIN `post_reg_sub_cat` ON `post_reg_sub_cat`.`id`=`posts`.`regional`
LEFT JOIN `post_reg_cat` ON `post_reg_cat`.`id_reg_cat`=`post_reg_sub_cat`.`id_reg_cat`
WHERE `id_post` != '129'
AND `post_reg_cat`.`reg_cat` = 'lampung'
AND MATCH (title) AGAINST("saya-punya-3-pertanyaan-untuk-brigita-manohara")
 LIMIT 5</p><p>Filename: models/M_api.php</p><p>Line Number: 347

Однако я провожу некоторые исследования, чтобы выполнить этот запрос вручную в веб-клиенте phpMyAdmin, поэтому я просто скопировал туда точно код запроса, и результат отлично работает.

Вот моя модель

function getRegRelasilNews($id, $slug, $limit) {
        $ur = base_url();
        $parse = parse_url($ur);
        $host = explode('.', $parse['host']);

        $subdomain = $host[0];

        $this->db->select('*');
        $this->db->join('post_reg_sub_cat', 'post_reg_sub_cat.id=posts.regional','left');
        $this->db->join('post_reg_cat', 'post_reg_cat.id_reg_cat=post_reg_sub_cat.id_reg_cat','left');
        $this->db->where('id_post !=', $id);
        $this->db->where('post_reg_cat.reg_cat', $subdomain);
        $this->db->where('MATCH (title) AGAINST("'.$slug.'")' , NULl);
        $this->db->limit($limit);
        return $this->db->get($this->table)->result();
    }

Что здесь происходит?

1 Ответ

1 голос
/ 12 апреля 2019

Это должно быть сделано так

Во-первых, убедитесь, что вы добавили заголовок столбца в индекс FULLTEXT в Phpmyadmin, или вы можете использовать запрос ниже

ALTER TABLE `Table_name` ADD FULLTEXT (`title`)

Затем внесите некоторые изменения в свой запрос после выбора синтаксиса первой таблицы, который должен выглядеть следующим образом:

 $this->db->from('first_table_name');

Тогда в том месте, где матч против должен использоваться как ниже

$this->db->where('MATCH (table_name.title) AGAINST("'.$slug.'")');

используйте имя table_name.column для каждого столбца, так как вы используете соединения, и это приведет к падению, если в других таблицах будут столбцы с тем же именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...