如何在MySQL查询中存储索引值而非数组,实现值存在性检查?
解决方案
问题根源
你当前的代码里,$selects数组存储的是一个个关联数组(比如['title_id' => 123]),而不是单纯的title_id数值,所以in_array($thisid, $selects)肯定匹配不到——因为你拿单个数值和整个关联数组比,逻辑不对。
方法1:直接存储title_id的一维数组
修改循环部分,把每个结果里的title_id单独取出来存入数组,这样$selects就变成纯数值的一维数组,in_array就能正常工作:
$selects = []; $res = mysqli_query($datab, "SELECT title_id FROM selects") or die($datab->error); // 常规循环写法 while ($row = mysqli_fetch_assoc($res)) { $selects[] = $row['title_id']; } // 更简洁的替代写法(PHP支持) // $selects = mysqli_fetch_all($res, MYSQLI_NUM); // $selects = array_column($selects, 0);
之后判断逻辑就能正常运行:
if (!in_array($thisid, $selects)) { $title[] = $datab; $j++; }
方法2:用SQL直接过滤(更高效)
如果数据量较大,把所有title_id读到PHP里再判断会浪费内存和性能。不如直接在后续查询里用SQL排除已存在的记录,比如用NOT EXISTS:
假设你后续要查询目标表,排除title_id已在selects表中的记录,可以这么写:
SELECT * FROM your_target_table WHERE title_id = ? AND NOT EXISTS (SELECT 1 FROM selects WHERE title_id = your_target_table.title_id)
这样数据库直接帮你过滤掉已存在的记录,PHP里就不用额外做in_array判断了。
内容的提问来源于stack exchange,提问作者calid
相关产品推荐
相关产品推荐

