как искать определенную часть в одном поле на SQL? - PullRequest
1 голос
/ 11 апреля 2019

Я делаю какую-то задачу, используя Codeigniter, и у меня проблема с поиском по запросу. У меня есть следующие данные в MySQL:

order_billing
--------------
19001-00001-32222
13501-00021-31122
13344-02351-16072
18701-00001-30922
11123-12301-12122

в нем есть 3 части формата order_billing: number_1-number_2-number_3

и я делаю форму поиска для этого

<input type="text" name="order_billing_1">-
<input type="text" name="order_billing_2">-
<input type="text" name="order_billing_3"> 

как мне сделать SQL-запрос при условии с

  • введите "order_billing_1" для поиска "number_1"
  • введите "order_billing_2" для поиска "number_2"
  • введите "order_billing_3" для поиска "number_3"

Я сделал такой код

$post = $this->input->post();
$search['number_1'] = $post['order_billing_1'];
$search['number_2'] = "-".$post['order_billing_2'];
$search['number_3'] = "-".$post['order_billing_3'];

и такой запрос

$this->db->like('order_billing', '$search['number_1']', 'after');
$this->db->or_like('order_billing', '$search['number_2']', 'both');
$this->db->or_like('order_billing', '$search['number_3']', 'before');

но это все еще не правильно. я все еще путаю как искать в ручном запросе SQL.

$search['number_1'] = $post['order_billing_1'];
$search['number_2'] = "-".$post['order_billing_2'];
$search['number_3'] = "-".$post['order_billing_3'];

запрос

Select * from TABLE WHERE order_billing like ????

Кто-нибудь знает, как решить эту проблему?

Ответы [ 4 ]

1 голос
/ 11 апреля 2019

Почему бы вам не сделать это в одну длинную строку?

$order_billing = $post['order_billing_1']."-".
                 $post['order_billing_2']."-".
                 $post['order_billing_3'];

Затем вы можете использовать это в простом запросе.

Обратите внимание, что я использовал $post, а не $_POST чтобы имитировать то, что вы сделали.

0 голосов
/ 11 апреля 2019

like '%something%' ищет 'что-то' между другим текстом

Допустим, вы ищете '1234'

для выставления счета 1 использование -> like '1234-%' для выставления заказа 2 использование-> like '%-1234-%' для выставления счета 3 использования -> like '%-1234'

0 голосов
/ 11 апреля 2019

SQL-запрос может быть написан так.Он будет соответствовать значениям, введенным пользователем, и использовать подстановочный знак в противном случае:

WHERE order_billing LIKE CONCAT_WS(
    '-',
    IFNULL(NULLIF(:order_billing_1, ''), '%'),
    IFNULL(NULLIF(:order_billing_2, ''), '%'),
    IFNULL(NULLIF(:order_billing_3, ''), '%')
)

Так, если пользователь указал '1234', '', '5678', запрос будет соответствовать 1234-%-5678.

0 голосов
/ 11 апреля 2019

В простом SQL вы хотите

SELECT * FROM TABLE WHERE order_billing = CONCAT('13344','-','02351','-','16072')

order_billing - это один столбец, поэтому его нужно искать в одной строке.CONCAT() помещает три поля ввода в одну строку.Существует множество других способов сделать это.

Остерегайтесь внедрения SQL.И подумай о нормализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...