2012-12-26 81 views
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') 

我如何解決這概率請求幫助,因爲它不包括()在我的或條件。

+0

那麼你的第一個代碼有什麼問題???該工作.. – bipen

回答

2

,如果你去到T他codeigniter userguide ..你可以看到有4種方式來調用where條款等

所有這些做了同樣的事情... ...和你的第一個代碼是笨風格(如果櫃面你擔心是不是),是由笨userguide 第四屆方法,你可以寫自己的條款手動 ...有呼籲在該反正那裏的功能沒有什麼區別...

,所以我會去的第一個查詢

$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(); 

這是完全正常的...

1

在複雜的查詢,我發現很容易只發送原始查詢像這樣的情況:

$query = "your query";

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

不要忘了將它們插入到這樣的查詢之前逃脫變量:

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

+0

我的第一個查詢工作正常,但它的手動查詢。我需要codeigniter風格。 – Shawon

+0

'$查詢=「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')「' 這是codeigniter風格。 –

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 = ?)