製品IDの配列があり、データベースに存在しないIDを見つける必要があります。確かに私はこのようにそれを行うことができます:
// IDs in database: 1, 2, 3, 4, 5.
$products = array(4, 5, 6, 7);
$in_db = $db->exec("SELECT `id` FROM `table` WHERE `id` IN (" . implode($products) . ");");
$in_db_ids = array();
foreach($in_db as $i){
$in_db_ids[] = $i['id'];
}
$missing = array_diff($products, $in_db_ids);
しかし、これは長くて退屈です。私はこのようなことについても考えました:
// this query would be generated with PHP using an implode or something
$query = "
SELECT `t`.`id` as `missing`
SELECT 4 as `id` UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
LEFT JOIN `table` USING(`id`)
WHERE `missing` is NULL;
";
$missing = $db->exec($query);
しかし、これはとてもエレガントではありません。私はそれを書くための適切な方法があるべきだと思いますSELECT x UNION SELECT y UNION SELECT z
、あるいはこのチェックをする別の良い方法があるかもしれません。どう思いますか?