如何在SQL的一个字段中搜索某个部分?

时间:2019-04-11 10:43:42

标签: php mysql sql codeigniter

我正在使用Codeigniter执行某些任务,并且在查询搜索中遇到问题。我在mysql中有以下数据:

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

对于order_billing,它具有3个部分的格式: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 个答案:

答案 0 :(得分:1)

为什么不把它变成一个长字符串呢?

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

然后您可以在简单的查询中使用它。

请注意,我使用$post而不是$_POST来模仿您所做的事情。

答案 1 :(得分:0)

您想要的普通SQL

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

order_billing是单个列,因此需要使用单个字符串进行搜索。 CONCAT()将您的三个输入字段放入一个字符串中。还有很多其他方法可以做到这一点。

当心SQL注入。然后考虑标准化。

答案 2 :(得分:0)

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相匹配。

答案 3 :(得分:0)

like '1234-%'在其他文本之间搜索“某物”

假设您要搜索“ 1234”

对于订单开票1,使用-> like '%-1234-%' 对于订单开票2,请使用-> like '%-1234' 对于订单结算3,请使用-> var cnt = jQuery("tbody td").length; for(var i=0; i<cnt; i++){ var ct=("cls"+parseInt(i+1, 10)); jQuery("tbody td:eq("+i+")").addClass(ct); for(var j=0;j<=1;j++) { $ ('#tab-1, #tab-2, #tab-3').find(".cls"+i+" .tableCell-inner div").eq(j).addClass("xxx"+i+j); } }