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

SQL重复指定查询条件时PHP返回非重复结果的问题求助

解决MySQL查询结果无法重复显示对应值的问题

这个问题其实很常见——你的SQL查询只会返回数据库中实际存在的唯一行,哪怕IN子句里有重复的username,因为数据库里username=2对应的记录只有一条,所以查询结果自然只有两行,最终JSON数组也就只有两个元素。

要实现按查询条件重复显示对应值,我们需要换个思路:先获取每个username对应的photo映射,再根据原始的用户名列表逐个取出对应的值,这样就能保留重复项了。

具体实现步骤

  1. 先把需要查询的用户名列表单独存为数组,方便后续遍历:
    $targetUsernames = ['1', '2', '2'];
    
  2. 调整SQL语句,只查询唯一的username对应的photo(避免重复查询相同数据),同时做好SQL注入防护:
    // 提取唯一用户名,减少查询压力
    $uniqueUsernames = array_unique($targetUsernames);
    // 转义处理防止SQL注入(如果用户名来自用户输入,这一步必须做)
    $escapedUsernames = array_map(function($name) use ($con) {
        return mysqli_real_escape_string($con, $name);
    }, $uniqueUsernames);
    $sql = "SELECT username, photo FROM table WHERE username IN ('" . implode("','", $escapedUsernames) . "')";
    
  3. 将查询结果转为用户名=>照片的关联数组,方便后续快速查找:
    $photoMap = [];
    $result = mysqli_query($con, $sql);
    while($row = mysqli_fetch_array($result)){
        $photoMap[$row['username']] = $row['photo'];
    }
    
  4. 遍历原始的目标用户名列表,逐个取出对应的照片值,构建最终结果数组:
    $res = [];
    foreach($targetUsernames as $username) {
        // 如果用户名在数据库中不存在,可设置默认值比如null
        $res[] = $photoMap[$username] ?? null;
    }
    echo json_encode($res);
    

为什么这个方案可行?

  • 通过一次查询获取所有需要的username映射,避免了重复查询数据库,提升效率
  • 基于原始的重复用户名列表逐个取值,完美保留了你想要的重复项顺序和次数
  • 加入了SQL注入防护,让代码更安全(尤其是当用户名来自用户输入时)

完整代码示例

$targetUsernames = ['1', '2', '2'];
$uniqueUsernames = array_unique($targetUsernames);
$escapedUsernames = array_map(function($name) use ($con) {
    return mysqli_real_escape_string($con, $name);
}, $uniqueUsernames);

$sql = "SELECT username, photo FROM table WHERE username IN ('" . implode("','", $escapedUsernames) . "')";
$photoMap = [];
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_array($result)){
    $photoMap[$row['username']] = $row['photo'];
}

$res = [];
foreach($targetUsernames as $username) {
    $res[] = $photoMap[$username] ?? null;
}

echo json_encode($res);

这样输出的JSON数组就会是["photo1的值", "photo2的值", "photo2的值"],完全符合你的需求啦!

内容的提问来源于stack exchange,提问作者error.exe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:38