我正在使用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查询
我做了一些这样的代码
$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 ????
有人知道如何解决吗??
答案 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);
}
}