#php #mysql #codeigniter-3
#php #mysql #codeigniter-3
Вопрос:
Я пытаюсь создать полнотекстовую поисковую индексацию на основе CodeIgniter query builder, и я получил странный результат, который гласит :
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:
Это должно быть сделано следующим образом
Сначала убедитесь, что вы добавили заголовок столбца в ПОЛНОТЕКСТОВЫЙ индекс в Phpmyadmin, или вы можете использовать запрос ниже
ALTER TABLE `Table_name` ADD FULLTEXT (`title`)
Затем внесите некоторые изменения в свой запрос после выбора синтаксис вашей первой таблицы должен быть таким
$this->db->from('first_table_name');
Затем в where match Against следует использовать, как показано ниже
$this->db->where('MATCH (table_name.title) AGAINST("'.$slug.'")');
используйте имя_таблицы.имя столбца для каждого столбца, потому что вы используете объединения, и это приведет к сбою, если в других таблицах будут столбцы с одинаковыми именами.
Комментарии:
1. Было бы разумно избегать SQL-инъекции в конце — автор вопроса может не знать об этой уязвимости безопасности, и подобные вещи — хорошая возможность научить их привязке параметров.
2. Извините за поздний ответ, но ваш код работает. Я просто забыл принять это.