Использование запроса типа codeigniter с подстановочным знаком

Я пытаюсь использовать 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'

1

Решение

Я не уверен, что именно вы пытаетесь сделать здесь.
Добавление третьего параметра как 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
*/
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]