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

如何编写基于设计师表布尔字段筛选对应帖子的SQL查询语句?

解决你的SQL查询问题

嘿,我来帮你搞定这个查询需求!你想筛选出所有属于“logo字段为1”的设计师的帖子,原来的写法有两个小问题:一是如果子查询返回多个designerID,用=会报错;二是直接拼接变量的写法存在SQL注入风险。下面给你几种正确的实现方式:

方法1:使用子查询+IN关键字

因为SELECT designerID FROM designers WHERE logo = 1可能返回多个设计师ID,所以要用IN代替=,这样就能匹配所有符合条件的ID:

SELECT * FROM post WHERE designerID IN (SELECT designerID FROM designers WHERE logo = 1);

这个写法逻辑直观,和你最初的思路最接近,适合快速实现需求。

方法2:使用JOIN连接查询

如果数据量比较大,用JOIN的效率通常更高,而且写法也很清晰:

SELECT p.* 
FROM post p
INNER JOIN designers d 
  ON p.designerID = d.designerID
WHERE d.logo = 1;

这里用了表别名p(代表post)和d(代表designers),让SQL更简洁。内连接会只返回两个表中匹配的记录,正好符合你的需求。

重要提醒:避免SQL注入

如果你是在PHP等编程语言中执行这段SQL,绝对不要直接拼接变量到SQL语句里,这会带来严重的SQL注入风险。推荐使用预处理语句,比如PHP的PDO示例:

// 假设已经初始化了PDO连接$pdo
$stmt = $pdo->prepare("SELECT * FROM post WHERE designerID IN (SELECT designerID FROM designers WHERE logo = ?)");
// 绑定参数并执行
$stmt->execute([1]);
// 获取结果
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);

预处理语句会自动处理参数转义,从根源上避免SQL注入问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:56:22