第 05 章过滤器

过滤器只影响看什么,不改动任何数据。分成两种:行过滤器决定显示哪些行, 列过滤器决定显示哪些列。

行过滤器

⌘F 打开。面板出现在数据网格上方的一条横条里,不遮挡数据。

行过滤器面板 第 2 条条件的列 `statuz` 不存在,请重新选择。 过滤器 name 包含 + age 大于等于 18 + status 不等于 deleted + ← 取消勾选可以临时停用,不用删掉 全部满足 满足任一 高级 / 直接写条件 重置 应用 🔑 id name email (结果网格在下面) 1 2 3 4 5 6 7 8 9
图 5-1 行过滤器面板。第三条条件没有被勾选,所以它不参与过滤,但条件本身保留着。
#控件作用
1勾选框 决定这一条是否参与过滤。取消勾选可以临时停用某个条件而不删掉它——对比不同的筛选范围时很好用。
2列下拉 列出当前表的所有列。列很多的时候下拉里带搜索框。选中的列会带上它的类型信息,避免选错同名列。
3操作符下拉 14 种操作符,见下一节。选中不需要值的操作符(比如「为空」)时,右边的值输入框会自动禁用。
4值输入框 填比较值。「在区间内」需要两个值;「在列表中」用逗号分隔多个值。ENUM / SET / 布尔列会变成下拉,不用手输。
5+ / − 添加一行(⌘I)、删除这一行(⇧⌘I)。
6组合方式 全部满足(AND)或满足任一(OR),二选一,作用于所有勾选中的条件。不支持混用,也不支持嵌套括号。
7高级 / 直接写条件 切换到直接手写过滤条件的模式,例如 id IN (1, 2, 3) AND status <> 'deleted'。切过去会提示「高级条件不会被校验,请自行确认语法正确」。
8重置 / 应用 重置清空所有条件并重新加载。应用按当前条件从第 1 页重新加载。
9错误提示条 应用失败时(比如引用了不存在的列)在面板顶部指出是哪一条错了。面板保持打开,方便直接改。

Esc 关闭面板。条件会保留,只是隐藏起来。

14 种操作符

操作符下拉 文本 等于 不等于 包含 不包含 开头是 结尾是 数值与日期 大于 大于等于 小于 小于等于 在区间内 在列表中 空值 为空 / 不为空 生成的 SQL 大概长这样 `name` = '张三' `name` <> '张三' `name` LIKE '%张%' `name` NOT LIKE '%张%' `name` LIKE '张%' `name` LIKE '%张' `age` > 18 `age` >= 18 `age` < 60 `age` <= 60 `age` BETWEEN 18 AND 60 `status` IN ('a','b') `email` IS NULL / IS NOT NULL 值里的 % 和 _ 会被转义, 所以「包含 %」查的就是百分号本身, 不是通配符。 BETWEEN 含两端 值用逗号分隔 这两条不需要填值
图 5-2 操作符下拉。左边是你在界面上看到的词,右边是实际生成的 SQL 条件。

高级模式:直接写条件

点「高级 / 直接写条件」,可以完全自己写过滤条件。条件行的模式与它互斥,切过去会清空另一侧。

高级模式 高级条件不会被校验,请自行确认语法正确。 过滤条件 id IN (1, 2, 3) AND status <> 'deleted' 切换回条件行模式时,这里写的内容会被清空。 应用
图 5-3 高级模式。SQL 片段直接拼进 WHERE 后面,不做引号包裹。

列过滤器

⌥⌘F 打开一个浮层,控制显示哪些列。

列过滤器 显示的列 搜索列… 全选 全不选 id INT · 主键 name VARCHAR(50) email VARCHAR(100) content LONGTEXT created_at DATETIME 至少保留一列可见 取消 应用 取消勾选的列不显示, 但数据仍然会被查询。 列显隐状态和列宽一起记住, 下次打开同一张表时恢复。
图 5-4 列过滤器浮层。
列显隐只是显示行为

隐藏一列不会减少查询的列数,被隐藏的列照样会被读出来——因为提交修改时可能需要用到它们。 真正想少读数据,用「复制列名」自己写 SELECT

至少要保持一列可见,否则「应用」按钮是灰的并给出提示。

列显隐只影响数据网格。右侧字段栏照样会把这一行的全部字段列出来——包括被隐藏的那些。

快速过滤

大多数时候你不必先打开过滤器面板再填条件。几种一步到位的做法:

快速过滤 status 按此列排序 按此列筛选 调整列宽 ← 新增一条「status = __」, 值留空并聚焦,等你填写 draft 按此值筛选 排除此值 ← 立刻加上 status = 'draft' ← 立刻加上 status <> 'draft' draft draft published archived deleted ENUM / SET / 布尔列 的值会变成下拉, 避免手输错。 user_id 42 点外键箭头 → 在新标签打开被引用表, 并自动加上「主键 = 该值」的条件。
图 5-5 四种不用打开过滤器面板就能筛选的方式。
操作效果
右键列头 → 按此列筛选新增一条「列 = 该列」的等于条件,值留空并聚焦,等你填写
右键单元格 → 按此值筛选新增一条「列 = 该列」且值等于该单元格内容的条件,立即应用
右键单元格 → 排除此值同上,操作符是「不等于」
外键单元格点 ↗在新标签打开被引用表,并自动加上「主键 = 该值」的条件
ENUM / SET / 布尔列过滤器的值输入框变成下拉选项

过滤器会被记住

每张表最后一次用过的过滤条件会被记住,下次打开这张表时自动恢复。 不喜欢这个行为可以在偏好里关掉(见第 11 章)。

过滤器与其他操作的相互影响

操作行为
应用 / 重置过滤器回到第 1 页重新加载
有未提交改动时改过滤器允许,但先提示「切换过滤条件会重新加载数据,你的修改会保留在暂存区」
有未提交改动时改排序同上
过滤器生效时提交提交成功后按当前过滤条件重新加载。被过滤掉的改动行虽然提交成功了,但不会出现在结果里
过滤条件引用了不存在的列应用时在面板顶部报错,并指出是哪一条
导出一张被过滤的表导出的是当前过滤条件下的数据,导出面板里会明确写出这一点

已知限制

不能嵌套括号
  • 不支持 (A AND B) OR C 这种嵌套分组
  • 所有条件只能是 AND 或 OR 中的一种,不能混用
  • 高级模式不做语法校验,写错了会把错误直接抛给数据库

需要复杂条件时,用高级模式手写,或者干脆用查询编辑器写一条完整的 SELECT。查询结果同样可以排序、复制、导出。