现在我有一个交叉引用表,如下所示:
Table job2pos
╔═══════════╦═════════════╗
║ job_id ║ position_id ║
╠═══════════╬═════════════╣
║ 1 ║ 10 ║
║ 2 ║ 10 ║
║ 2 ║ 12 ║
║ 3 ║ 11 ║
║ 3 ║ 13 ║
║ 4 ║ 10 ║
║ 5 ║ 13 ║
╚═══════════╩═════════════╝
我想选择所有job_id
有 postion_id = 10
和position_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
不作为索引出现,而是作为数组中的值出现?
- 附注如果您能指出我的代码中任何不必要的代码,那就太好了。
最佳答案
特殊的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));
关于php - 从交叉引用表中获取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616632/