Я пытаюсь использовать like
запрос на Codeigniter. Функция ускользает от моего знака процента %
в \%
,
Мой запрос:
SELECT *
FROM (`invoices_rent`)
WHERE `clerk_name` = 'BEAUTY'
AND `date` LIKE '\%/\%/\%'
$this->db->like('date', $date, 'none');
Что я могу сделать, чтобы избежать выхода знака процента?
Я пытаюсь сделать фильтр с датой, когда я могу получить номер или подстановочный знак. Так что я хочу присоединиться к этим данным таким образом, чтобы я мог получить месяц, год или дату, которые хочет пользователь. Поэтому я бы перешел к запросу «% / 02/2015» или «% /% / 2015», чтобы вернуть диапазон данных, который мне нужен. Но у меня проблема с выходом из функции.
Я думаю, что мне нужно создать весь запрос вместо того, чтобы использовать функции CodeIgniter для его выполнения. Следуйте фактической функции модели.
$date = "%/03/2015";
public function getallinvoices($type = false, $date = false, $clerk = false)
{
if($type == "m")
$table = "invoice_month";
else
$table = "invoices_rent";
if($date != false)
$this->db->like('date', $date, 'none');
if($clerk != false && $clerk != "all")
$this->db->where('clerk_name', $clerk);
$query = $this->db->get($table);
$this->output->enable_profiler(TRUE);
print_r($query);
return $query->result_array();
}
Я хочу, чтобы запрос вернулся как:
SELECT *
FROM (`invoices_rent`)
WHERE `clerk_name` = 'BEAUTY'
AND `date` LIKE '%/03/2015'
Я не уверен, что именно вы пытаетесь сделать здесь.
Добавление третьего параметра как none
не будет добавлять подстановочный знак (%)
вокруг значения (или это может escape
их, в вашем случае).
От документы:
Если вы не хотите использовать подстановочный знак (%), вы можете передать необязательному третьему аргументу параметр ‘none’.
$ this-> db-> like (‘title’, ‘match’, ‘none’);
// Производит: ГДЕ название LIKE ‘match’
Следовательно, если вы хотите использовать подстановочный знак, просто Удалить 3-й параметр.
(только для справки)
Принимая таблицу,
`invoices_rent`
id rent invoice_number clerk_name date
1 150 INV001 BEAUTY 2015-03-04
2 250 INV002 BEAUTY01 2015-02-05
3 350 INV003 BEAUTY 2015-03-04
Запрос,
$date = '2015-03-04';
$this->db->like('date', $date);
$this->db->where('clerk_name');
$query = $this->db->get('invoices_rent');
return $query->result();
/**
* Result will give id: 1 & 3 as output
*/
РЕДАКТИРОВАТЬ:
Согласно вашему обновленному вопросу, в основном вам нужны все строки месяца марта 2015 года. То, что вы пытаетесь, определенно не является правильным способом запроса, когда речь идет о диапазонах дат. То, что вы можете сделать, это как получить начало месяца (например, 2014-03-01) и конец месяца (2014-03-31) и использовать between clause
и это даст вам все строки месяца марта
Ниже будет ваш запрос.
$month_start = date('Y-m-01', 'March'); # Month's start
$month_end = date('Y-m-t', 'March'); # Month's end
$this->db->where('date >=', $month_start);
$this->db->where('date <=', $month_end);
$this->db->where('clerk_name');
$query = $this->db->get('invoices_rent');
return $query->result();
/**
* Result will give id: 1 & 3 as output
*/
Других решений пока нет …