You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:48:14