0

私のクエリ:

$this->db->select('*');
$this->db->join('pos_item_sales', 'pos_item_sales.item_id = pos_item_infos.item_id');
$this->db->join('pos_batch_infos', 'pos_batch_infos.item_id = pos_item_infos.item_id');
$this->db->where("`pos_item_sales`.`transaction_id` =  '$transaction_id' AND (`pos_item_sales`.`item_barcode` =  '$term' OR `pos_batch_infos`.`item_mbarcode` =  '$term' OR `pos_item_infos`.`item_id` =  '$term')");
$query = $this->db->get('pos_item_infos');
echo $this->db->last_query();

それは私の問題を解決しますが、次のようなクエリが必要です:

$term = $this->input->get('term',TRUE);
$this->db->select('*');
$this->db->join('pos_item_sales', 'pos_item_sales.item_id = pos_item_infos.item_id');
$this->db->join('pos_batch_infos', 'pos_batch_infos.item_id = pos_item_infos.item_id');
$this->db->where('pos_item_sales.transaction_id',$transaction_id);
$this->db->where('pos_item_sales.item_barcode',$term);
$this->db->or_where('pos_batch_infos.item_mbarcode',$term);
$this->db->or_where('pos_item_infos.item_id',$term);
$query = $this->db->get('pos_item_infos');
echo $this->db->last_query();

しかし、次のようなクエリが必要です:

SELECT *
FROM (`pos_item_infos`)
JOIN `pos_item_sales` ON `pos_item_sales`.`item_id` = `pos_item_infos`.`item_id`
JOIN `pos_batch_infos` ON `pos_batch_infos`.`item_id` = `pos_item_infos`.`item_id`
WHERE `pos_item_sales`.`transaction_id` =  '11355822927'
AND (`pos_item_sales`.`item_barcode` =  '8801962686156'
OR `pos_batch_infos`.`item_mbarcode` =  '8801962686156'
OR `pos_item_infos`.`item_id` =  '8801962686156')

この問題を解決する方法を教えてください。私のまたは条件に ( ) が含まれていないためです。

4

3 に答える 3

2

codeigniterのユーザーガイドを見ると、where節を呼び出す方法が 4 つあります。

これらはすべて同じことを行います...そして最初のコードはcodeigniterスタイルです(心配している場合はそうではありません)。これは、独自の句を手動で記述できるcodeigniterユーザーガイドによる4番目の方法です...違いはありませんとにかくwhere関数を呼び出す際に...

だから私はあなたの最初のクエリに行きます

$this->db->select('*');
$this->db->join('pos_item_sales', 'pos_item_sales.item_id = pos_item_infos.item_id');
$this->db->join('pos_batch_infos', 'pos_batch_infos.item_id = pos_item_infos.item_id');
$this->db->where("`pos_item_sales`.`transaction_id` =  '$transaction_id' AND (`pos_item_sales`.`item_barcode` =  '$term' OR `pos_batch_infos`.`item_mbarcode` =  '$term' OR `pos_item_infos`.`item_id` =  '$term')");
$query = $this->db->get('pos_item_infos');
echo $this->db->last_query();

これは完全に問題ありません...

于 2012-12-26T06:34:34.850 に答える
1

複雑なクエリの場合、次のような生のクエリを送信する方が簡単だと思います:

$query = "your query";

$result = $this->db->query($query);

次のように変数をクエリに挿入する前に、変数をエスケープすることを忘れないでください。

$var = $this->db->escape($var);

于 2012-12-26T06:22:00.707 に答える
0
$query="SELECT *
FROM pos_item_infos
JOIN pos_item_sales ON pos_item_sales.item_id = pos_item_infos.item_id
JOIN pos_batch_infos ON pos_batch_infos.item_id = pos_item_infos.item_id
WHERE pos_item_sales.transaction_id =  ?
AND (pos_item_sales.item_barcode =  ?
OR pos_batch_infos.item_mbarcode =  ?
OR pos_item_infos.item_id =  ?)";
$params=array();
$params[]='11355822927';
$params[]='8801962686156';
$params[]='8801962686156';
$params[]='8801962686156';


$result=$this->db->query($query,$params);
$result=$result->result_array();
print_r($result);

また、。を使用して構文を簡略化しますUSING

SELECT *
FROM pos_item_infos
JOIN pos_item_sales USING (item_id)
JOIN pos_batch_infos USING (item_id)
WHERE pos_item_sales.transaction_id =  ?
AND (pos_item_sales.item_barcode =  ?
OR pos_batch_infos.item_mbarcode =  ?
OR pos_item_infos.item_id =  ?)
于 2013-03-21T23:19:45.127 に答える