Php 选择具有复合关键点的独立联合
所以, 我当前的问题是从php/pdo/mysql创建一个语言文件。有多个结构相同的语言表,但应用程序每次运行仅使用2个-一个可能不完整的用户选择语言和一个完整的回退语言。现在我们假设英语表是完整的,但是任何翻译表都可能不是,所以我们希望从英语表返回任何缺少的翻译 因此,假设表是lang_EN和lang_DE,包含列section、type、label和content 朗恩: 部分:'admin',类型:'button',标签:'hello',内容:'hello World' 部分:“管理员”,类型:“按钮”,标签:“再见”,内容:“再见残酷世界” 朗德: 部分:'admin',类型:'button',标签:'hello',内容:'Hallo Welt' 表的主键是节、类型和标签的组合。不能有其他索引-这是由于使用insert on duplicate key update查询填充和更新语言表的方式造成的 由于服务器限制,它必须在单个查询中完成。我一直在想,唯一能做到这一点的方法就是通过一个遵循 从语言中选择内容 其中section='admin' 和类型='button' 联合独立 从语言中选择内容 其中section='admin' 和类型='button' 预期结果如下: 哈罗贴边 再见残酷的世界 我知道,通过在所有表中添加匹配的索引键,可以轻松创建查询,但由于语言变化和更新方式的潜在差异,这是不可能的,所以我现在很困惑Php 选择具有复合关键点的独立联合,php,mysql,pdo,union,composite-primary-key,Php,Mysql,Pdo,Union,Composite Primary Key,所以, 我当前的问题是从php/pdo/mysql创建一个语言文件。有多个结构相同的语言表,但应用程序每次运行仅使用2个-一个可能不完整的用户选择语言和一个完整的回退语言。现在我们假设英语表是完整的,但是任何翻译表都可能不是,所以我们希望从英语表返回任何缺少的翻译 因此,假设表是lang_EN和lang_DE,包含列section、type、label和content 朗恩: 部分:'admin',类型:'button',标签:'hello',内容:'hello World' 部分:“管理员”,
任何建议都将不胜感激。我建议采用以下方法:
(SELECT content
FROM language_DE
WHERE section = 'admin' AND type = 'button'
) UNION ALL
(SELECT content
FROM language_EN en
WHERE section = 'admin' and type = 'button' and
NOT EXISTS (SELECT 1
FROM language_DE de
WHERE de.section = en.section and de.type = en.type and de.label = en.label
)
)
与您的方法相比,有两个优势。首先,您可以选择其他列,而不必担心缺少重复项。其次,它使用索引,并且没有昂贵的重复删除操作。我使用行子查询构造函数找到了解决方案: 从language_EN中选择内容,其中section='admin'和type='button' 其中节、类型、标签不在“从语言中选择节、类型、标签” 联合
从language_DE中选择内容,其中section='admin'和type='button'谢谢。我应该好好考虑一下,但是不行。我采用了这种方法,它只返回语言表的结果。@MrBob。也就是说,第二个子查询没有返回任何内容。这是真的吗?是的。我可以看到它的方向,你启发我使用行子查询得到下面的答案。@Bob先生。我没注意到标签是你要找的钥匙的一部分。