php - 从交叉引用表中获取唯一值

标签 php mysql pdo

现在我有一个交叉引用表,如下所示:

       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不作为索引出现,而是作为数组中的值出现?

  • 附注如果您能指出我的代码中任何不必要的代码,那就太好了。

最佳答案

特殊的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/

相关文章:

php - 如何创建正确的 preg_replace 模式?

mysql查询错误

php - MySQL 一次更新多个表

php - Laravel 不获取 MySQL 登录信息

php - CakePHP 3 - 多条件查找

PHP:将字符串拆分为 8 个 block ,我该怎么做?

php - 从 Mysqli 中获取 id

MySql 统计表中当前月份和当前年份之前的所有行

mysql - MAMP PRO 在 my.cnf 中禁用 ONLY_FULL_GROUP_BY、NO_ZERO_IN_DATE、NO_ZERO_DATE

php - undefined index 和 undefined variable ,但两者都已定义! (我认为....)