2013-07-05 120 views
2

我在數據庫中有兩個表。 1)tbl_lab_checkup 2)tbl_lab如果記錄存在,匹配數組中的所有記錄MySQL查詢

tbl_lab具有實驗室的所有記錄,tbl_lab_checkup具有所有記錄ø檢查該實驗提供。

以下是在表

1) tbl_lab_checkup 
-- labcheckupid (pk) 
-- labid (fk) 
-- checkupid (fk) 
-- cost 
-- discount 

2) tbl_lab 

-- labid (pk) 
-- labname 
-- labarea (fk) 

字段我有 'areaID表示'= 1和在陣列 'checkupid' 我與聯繫 「」(1,2)。

我想是讓所有在areaID表示= 1可用的lablist誰提供了一個陣列(1,2)

我嘗試下面的查詢,但即時得到錯誤的結果所有的檢查。

SELECT tlc .* FROM tbl_lab_checkup tlc 
INNER JOIN tbl_lab lb ON 
tlc.labid = lb.labid 
WHERE 
tlc.checkupid IN (1,2) AND lb.labarea=1 
GROUP BY lb.labid 

即使實驗室只提供一個id在數組中也返回結果。任何人都可以爲此解決。

檢查小提琴:http://sqlfiddle.com/#!2/5c674/1

回答

4

如果你已經建立這種查詢,那麼你可以添加having子句類似以下內容:

SELECT tlc .* FROM tbl_lab_checkup tlc 
INNER JOIN tbl_lab lb ON 
tlc.labid = lb.labid 
WHERE 
tlc.checkupid IN (1,2) AND lb.labarea=1 
GROUP BY lb.labid 
having count(tlc.checkupid) = 2; 

這裏having count(tlc.checkupid) = 2;2tlc.checkupid IN (1,2)你的元素的個數。

如果您想要distinct tlc.checkupid,您可以將having count(tlc.checkupid) = 2切換爲having count(distinct tlc.checkupid) = 2;

+0

是的,這應該工作lemme嘗試。 :) – Mahendra

+0

它會在所有情況下工作嗎?我的意思是如果lab2有1個共同的和另一個不在陣列中的檢查?它會給同樣的結果嗎? – Mahendra

+0

是的,它應該,你有測試數據嗎? – vee

0

我一般會去與vinodadhikary上述建議,但另一種選擇是使用每檢查一個JOIN: -

SELECT lb.* 
FROM tbl_lab lb 
INNER JOIN tbl_lab_checkup tlc1 ON tlc1.labid = lb.labid AND tlc1.checkupid = 1 
INNER JOIN tbl_lab_checkup tlc2 ON tlc2.labid = lb.labid AND tlc2.checkupid = 2 
WHERE lb.labarea=1 

這工作時,你希望所有的tbl_lab_checkup記錄的細節

3

使用此代碼在CI中獲得所需結果:

$this->db->select("tbl_lab.*");  
$this->db->join("tbl_lab_checkup","tbl_lab_checkup.labid = tbl_lab.labid"); 
$this->db->where("tbl_lab.labarea","1"); 
$find="FIND_IN_SET('1,2','tbl_lab_checkup.checkupid')"; 
$this->db->where($find); 
$this->db->get("tbl_lab"); 
相關問題