mysql - 通过单个查询查找 ID 数组中的哪一个没有记录

标签 mysql join pdo

我正在使用 PHP PDO 生成准备好的语句,以根据 ID 数组从两个表中提取信息。

然后我意识到,如果通过的 ID 没有记录我就不会知道。

我正在查找记录

SELECT 
    r.`DEANumber`, 
    TRIM(r.`ActivityCode`) AS ActivityCode, 
    TRIM(r.`ActivitySubCode`) as ActivitySubCode, 
    // other fields...
    a.Activity
FROM 
    `registrants` r,
    `activities` a
WHERE r.`DEAnumber` IN ( ?,?,?,?,?,?,?,? )
    AND a.Code = ActivityCode
    AND a.Subcode = ActivitySubCode

但是我无法找出表示哪个 ID 没有记录的负连接。

如果涉及两个表,我想我可以这样做

SELECT
r.DEAnumber
FROM registrant r
LEFT JOIN registrant2 r2 ON r.DEAnumber = r2.DEAnumber
WHERE r2.DEAnumber IS NULL

但是我对如何使用这里的 ID 数组感到困惑。显然,我可以迭代数组并跟踪哪些查询没有结果,但这似乎是一种手动且浪费的方法......

最佳答案

Obviously I could iterate over the array and track which queries had not result but it seems like such a manual and wasteful way to go.

花时间解决这个不存在的“问题”可能是真正的浪费。

是的,你可以迭代。手动或使用 PHP 中的 array_diff() 等语法糖。

我建议您不要让查询变得更复杂(意味着支持更繁重)而收效甚微,而是继续前进。

正如 Knuth 老人曾经说过的那样“过早的优化是万恶之源”。

我能想到的 PDO 唯一的帮助是 fetch mode that will put IDs as keys for the returned array ,因此您将能够在没有[明确编写]循环的情况下完成它,例如

$stmt->execute($ids);
$data = $stmt->fetchAll(PDO::FETCH_UNIQUE);
$notFound = array_diff($ids, array_keys($data));

然而,手动循环只需要额外的两行,老实说,这并不是什么大不了的事。

关于mysql - 通过单个查询查找 ID 数组中的哪一个没有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35329893/

相关文章:

mysql - 许多记录匹配查询,但mysql只显示第一个

php - 用一个变量查询多个字段的PDO最佳实践

mysql - 如何提高此 SELECT 查询 JOIN 的性能

java - Hibernate onetomany 中的外键未更新

java - 如何正确从mysql数据库中选择数据?结果集错误

sql-server - 如何提高 where 子句或联接中列的非确定性函数的性能?

mysql - SQL 选择多对多

javascript - 多个ajax调用同一个文件来执行同一个文件中的不同代码?

php - 复制结构未知的 MySQL 行

mysql - 在 SQL 中拆分名称