Запрос CodeIgniter дает неожиданные результаты при использовании 2 или более поисковых слов [закрыто]Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Запрос CodeIgniter дает неожиданные результаты при использовании 2 или более поисковых слов [закрыто]

Сообщение Anonymous »

Код: Выделить всё

$all = $this->input->get('all');

if($all)
{
$keywords = $this->input->get('search');
$data['search'] = $keywords;
$this->session->set_flashdata('search', $keywords);
$query = "SELECT *  FROM `investOffers`, `news`";
$counts = "SELECT count(*) as count FROM  `investOffers`, `news`";
$first = false;
if($keywords)
{
$data['keywords'] = $keywords;
$this->session->set_flashdata('keywords', $keywords);
$keywords = explode(" ", $keywords);
foreach($keywords as $k)
{
if(!$first)
{
$query .= " WHERE investOffers.desc LIKE '% ".$k." %' OR investOffers.title LIKE '% ".$k." %'";
$query .= " OR news.desc LIKE '% ".$k." %' OR news.title LIKE '% ".$k." %'";
$counts .= " WHERE investOffers.desc LIKE '% ".$k." %' OR investOffers.title LIKE '% ".$k." %'";
$counts .= " OR news.desc LIKE '% ".$k." %' OR news.title LIKE '% ".$k." %'";
$first = true;

}
else
{
$query .= " OR investOffers.desc LIKE '% ".$k." %' OR investOffers.title LIKE '% ".$k." %'";
$query .= " OR news.desc LIKE '% ".$k." %' OR news.title LIKE '% ".$k." %'";
$counts .= " OR investOffers.desc LIKE '% ".$k." %' OR investOffers.title LIKE '% ".$k." %'";
$counts .= " OR news.desc LIKE '% ".$k." %' OR news.title LIKE '% ".$k." %'";
}
}

}
$page = $this->uri->segment(2);
if($page)
{
$query .= " ORDER BY investOffers.date DESC LIMIT ".$page.", 10";
$counts .= " ORDER BY investOffers.date DESC LIMIT 10";
}
else
{
$query .= " ORDER BY investOffers.date DESC LIMIT 10";
$counts .= " ORDER BY investOffers.date DESC LIMIT 10";
}
$data['query'] = $this->db->query($query);
$counts = $this->db->query($counts);
foreach($counts->result() as $q)
{

$count = $q->count;
break;

}
$config['base_url'] = base_url().'/search';
$config['prev_link'] = false;
$config['next_link'] = false;
$config['last_link'] = false;
$config['first_link'] = false;
$config['suffix'] = '?'.http_build_query($_GET, '', "&");
$config['cur_tag_open'] = '[b]';
$config['cur_tag_close'] = '[/b]';
$from = intval($this->uri->segment(2));
$config['per_page'] =  10;
$config['num_links'] = 5;
$config['uri_segment'] = 2;
$config['total_rows'] = $count;
$this->pagination->initialize($config);
$data['pager'] = $this->pagination->create_links();
$data['content'] = $this->load->view(SITE.'search', $data, true);
$this->load->view(SITE.'layout', $data);
return true;

}
Это поисковый запрос. Сначала проверяем, есть ли поиск «все», то есть поиск по всему сайту. Затем я создаю массив ключевых слов, разделенных пробелами, вводимых в форму. Затем я поместил его во флэш-сессию для preg_match() в представлении — это для preg_match(), выделяющего текст в представлении сгенерированных результатов. Затем я объединяю запрос, добавляя дополнительные условия LIKE. Когда я ввожу одно ключевое слово, оно дает разные результаты, и это нормально. Когда я ввожу 2 или более ключевых слов, я получаю одни и те же результаты — я имею в виду список абсолютно одинаковых результатов, я не могу понять, почему это так. На вид все в порядке. Проблема в этом коде контроллера. Я попытался установить ключевое слово DISTINCT в запросе, но это не помогло.
Это приложение CodeIgniter, и приведенный выше код — мой метод контроллера. Я не использую модели, потому что не хочу открывать много файлов.

Подробнее здесь: https://stackoverflow.com/questions/107 ... arch-words
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»