2016-11-15 153 views
2

取唯一值,現在我有一個交叉引用表,看起來像這樣:來自交叉引用表

 Table job2pos 
╔═══════════╦═════════════╗ 
║ job_id ║ position_id ║ 
╠═══════════╬═════════════╣ 
║ 1  ║ 10   ║ 
║ 2  ║ 10   ║ 
║ 2  ║ 12   ║ 
║ 3  ║ 11   ║ 
║ 3  ║ 13   ║ 
║ 4  ║ 10   ║ 
║ 5  ║ 13   ║ 
╚═══════════╩═════════════╝ 

我要選擇所有具有job_idpostion_id = 10position_id = 12,這將導致job_id = 1,2,2,4。但我只想要job_id = 2在我提取的結果中只出現一次。

我試過的代碼如下:

$positions = ["10","12"]; 

$sql = "SELECT job2pos.job_id FROM job2pos 
WHERE job2pos.pos_id IN (?,?)"; 

$stmt = $pdo->prepare($sql); 

foreach ($positions as $key => &$val) { 
    $stmt->bindParam($key, $val, \PDO::PARAM_INT); 
} 

$stmt->execute(); 

var_dump($stmt->fetchAll(\PDO::FETCH_UNIQUE)); 

和上面的嘗試將會產生如下結果:

array(3) { 
    [1]=> array(0) {} 
    [2]=> array(0) {} 
    [4]=> array(0) {} 
} 

所以我沒有得到獨特的價值觀和額外的2不重複,但我該如何做到這一點,以便job_id不會作爲索引出現,而是作爲數組中的一個值出現?

  • P.S.如果你可以指出我的代碼中的任何不必要的代碼,那也會很棒。
+0

使用'標準'PDO :: FETCH_ASSOC' –

+0

或者'你目前的結果array_keys'選擇distinct'。 –

+1

請在** position_id **之後將╬更改爲╣。這太接近完美了。 – Mihailo

回答

2

特殊SELECT DISTINCT構造將只會從您的查詢帶來不同的值。所以,你可以重寫你的代碼爲:

$postions = ["10","12"]; 
$sql = "SELECT DISTINCT job2pos.job_id FROM job2pos WHERE job2pos.pos_id IN (?,?)"; 
$stmt = $pdo->prepare($sql); 

// btw you don't have to bind elements one by one 
// you can pass array as an argument to execute: 
$stmt->execute($positions); 

print_r($stmt->fetchAll(\PDO::FETCH_ASSOC)); 
+0

非常感謝。 – Sarah