高效多语言站点SQL查询编写提示词
本提示词方案旨在帮助数据库开发者或全栈工程师,高效生成适用于多语言内容站点的精准SQL查询。
提示词内容
复制角色定义
你是一位资深的全栈数据库架构师,专注于为国际化Web应用设计高效、清晰的数据查询方案。你的核心任务是:将复杂的多语言内容检索需求,转化为精准、优化且易于维护的SQL查询语句,确保数据查询在性能与准确性上达到最佳平衡。
适用场景
本方案适用于需要从支持多语言的数据库表中(通常采用关联表或JSON字段结构存储翻译内容)检索、筛选、聚合或管理特定语言内容的场景,例如:
- 为网站前台按语言和分类拉取已发布的文章列表。
- 在管理后台根据关键词和语言标签搜索并编辑内容。
- 生成包含特定语言版本内容的报表或数据分析。
- 构建需要动态切换语言的内容API接口底层查询。
核心提示词
以下提示词模板可直接用于生成查询,请替换 `[表名]`、`[字段名]` 等占位符为您的实际值:
- “构建一个SQL查询,从 `[主表]` 和 `[翻译表]` 中联查,获取状态为‘已发布’且语言代码为 `[lang_code]` 的所有条目,返回主表ID、发布时间、以及翻译表中的标题和摘要字段。”
- “编写一个查询,统计每个内容分类下,每种语言版本的有效内容数量,结果按分类ID和语言代码排序。”
- “设计一个多条件搜索查询,在 `[翻译表]` 的标题和正文字段中模糊匹配关键词 `[keyword]`,同时过滤语言为 `[lang_code]` 且主表状态有效,最后按相关性或发布时间降序排列。”
风格方向
生成的SQL语句应遵循以下风格准则:
- 结构清晰:使用明确的表别名(如 `p` 代表 posts, `t` 代表 translations),合理换行展示SELECT、JOIN、WHERE、ORDER BY子句。
- 语义明确:字段名使用完整的、易于理解的名称,必要时使用 `AS` 定义清晰的列别名。
- 性能优先:优先使用INNER JOIN而非多个WHERE关联,为频繁过滤的条件字段(如`language_code`, `status`)考虑索引。
构图建议
将查询语句想象为一个结构化的视觉模块,建议按以下逻辑层次组织:
- 核心选择区(SELECT):明确列出所需字段,区分来自主表和翻译表的字段。
- 关系连接区(JOIN):清晰表述表之间的关联关系(如 `ON p.id = t.post_id AND t.language = :lang`)。
- 过滤筛选区(WHERE):集中放置状态、语言、时间范围等过滤条件。
- 排序分组区(ORDER/GROUP BY):定义结果的呈现顺序或聚合逻辑。
细节强化
为提升查询的健壮性和可读性,可加入以下细节:
- 参数化占位符:使用 `:lang`、`:status` 等占位符提示应参数化输入,防止SQL注入。
- 注释说明:在复杂查询关键部分添加简短注释,如 `-- 获取指定语言的最新翻译`。
- 处理空值:考虑使用 `COALESCE(t.title, p.default_title)` 来提供翻译缺失时的回退值。
- 性能提示:在提示词中可补充建议索引,如 `-- 建议在 translations(post_id, language_code) 上建立复合索引`。
使用建议
如何有效利用本方案生成最终查询:
- 首先,根据您的具体场景,从核心提示词中选择一个最接近的模板作为起点。
- 替换所有占位符为您的实际数据库表名和字段名。
- 依据风格方向和构图建议调整语句格式,使其清晰可读。
- 参考细节强化点,根据您的业务逻辑补充回退机制、注释或性能优化建议。
- 最终生成的应是一段可直接在数据库管理工具中测试、或嵌入后端代码的完整SQL语句。