2013-05-26 2 views
5

По крайней мере, это то, что, кажется, происходит. Я пытаюсь создать панель поиска для веб-сайта, и она работает, за исключением того, что она не читает предложение where, которое только отталкивает одобренный контент. Вы можете понять, почему это будет проблемой.codeigniter как условие overriding где пункт

Во всяком случае, это то, что у меня есть в моей модели

$match = $this->input->post('search');  
$this->db->where('approved', 'y'); 
$this->db->like('description', $match); 
$this->db->or_like('title', $match); 
$this->db->or_like('body', $match); 
$this->db->or_like('author', $match); 

$query = $this->db->get('story_tbl'); 

return $query->result(); 

и при печати из запроса, кажется, что видит, где положение, но когда я получаю вещи назад он тянет вещи, которые не утвержден или не рассматривается.

Вот мой запрос печататься

SELECT * FROM (`story_tbl`) WHERE `approved` = 'y' AND `description` LIKE 
'%another%' OR `title` LIKE '%another%' OR `body` LIKE '%another%' OR 
`author` LIKE '%another%' 

ответ

2

Ваш запрос должен быть

SELECT * FROM (`story_tbl`) WHERE `approved` = 'y' AND (`description` LIKE 
'%another%' OR `title` LIKE '%another%' OR `body` LIKE '%another%' OR 
`author` LIKE '%another%') 

Проверьте эти кронштейны. Итак, ваш лучший вариант - использовать простой $this->db->query(). Если вы настаиваете на использовании активных записей, вы должны сделать это, как это для тех скобках -

$match = $this->input->post('search'); 
$this->db->where('approved', 'y'); 
$this->db->where("(`description` LIKE '%$match%'"); 
$this->db->or_where("`title` LIKE '%$match%'"); 
$this->db->or_where("`body` LIKE '%$match%'"); 
$this->db->or_where("`author` LIKE '%$match%')"); 
$query = $this->db->get('story_tbl'); 

EDIT:

true AND true OR true OR true //true 
false AND true OR true OR true //true just like your where clause is ignored 
false AND false OR false OR true //Still true 
false AND true OR false OR false //false 
false AND false OR false OR false //false 

Так что этот запрос будет возвращать все строки, где Approved = «у 'OR, где заголовок, тело, автор соответствует 'другому'

В моем публикуемом запросе

true AND (true OR true OR true) //true 
false AND (true OR true OR true) //false, where clause is checked 
true AND (false OR false OR false) //false 
true AND (true OR false OR false) //true 

Который вернет строки, в которых одобрено = 'y', а также название или тело, автор или описание соответствует «другому». Я считаю, что это то, чего вы хотите достичь.

+0

Зачем мне эти скобки? Это то, как codeigniter печатает его на странице, а querry выше того, что я написал, по-прежнему игнорирует мое первое предложение where. Я смущен, почему лучше использовать $ this-> db-> querry над активными записями? – zazvorniki

+0

Предложение where игнорируется из-за отсутствия скобки. Вам нужно понять, как работает AND, OR. – sakibmoon

+0

Я понимаю, как они работают, но когда я вставил код выше, он дал мне ошибку 500. 'символы не должны иметь значение – zazvorniki

Смежные вопросы