You need to enable JavaScript to run this app. 如何使用PHP和MySQL查询同时拥有多个指定idSkill的idUser
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP和MySQL查询同时拥有多个指定idSkill的idUser

解决方案

1. 编写MySQL查询语句

有两种常用的实现方式,都可以得到你要的结果:

方式1:GROUP BY + HAVING聚合查询(推荐,扩展性更强)

SELECT idUser 
FROM skills 
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 2;

说明:

  • 如果你的表已经对idUser和idSkill做了唯一约束,不存在同一个用户同一个技能重复录入的情况,可以去掉DISTINCT,直接写COUNT(idSkill) = 2即可
  • 后续如果需要查询同时匹配N个技能的用户,只需要修改IN里的技能ID列表,再将HAVING后的数字改为对应的N即可,不需要调整其他逻辑

方式2:表自连接查询

SELECT DISTINCT s1.idUser
FROM skills s1
INNER JOIN skills s2 ON s1.idUser = s2.idUser
WHERE s1.idSkill = 4 AND s2.idSkill = 9;

2. PHP代码实现

以下示例均使用安全的查询逻辑编写,避免SQL注入风险:

示例1:基于MySQLi扩展实现

<?php
// 数据库连接配置,替换为你自己的配置
$host = '127.0.0.1';
$user = '数据库用户名';
$password = '数据库密码';
$dbname = '数据库名';

// 建立连接
$conn = new mysqli($host, $user, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 执行查询
$sql = "SELECT idUser FROM skills WHERE idSkill IN (4,9) GROUP BY idUser HAVING COUNT(DISTINCT idSkill) = 2";
$result = $conn->query($sql);

$idUsers = [];
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $idUsers[] = $row['idUser'];
    }
}

// 输出结果,得到的$idUsers就是[8,32]
print_r($idUsers);

// 关闭连接
$conn->close();
?>

示例2:基于PDO扩展实现

<?php
// 数据库连接配置,替换为你自己的配置
$host = '127.0.0.1';
$user = '数据库用户名';
$password = '数据库密码';
$dbname = '数据库名';

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT idUser FROM skills WHERE idSkill IN (4,9) GROUP BY idUser HAVING COUNT(DISTINCT idSkill) = 2";
    $stmt = $conn->query($sql);
    
    // 直接提取所有符合要求的idUser为一维数组
    $idUsers = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
    print_r($idUsers);
} catch(PDOException $e) {
    echo "查询错误: " . $e->getMessage();
}
$conn = null;
?>

内容的提问来源于stack exchange,提问作者nusima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 23:36:02