基于PHP/MySQL/Javascript的TMX编辑器三类数据异常的MySQL查询求助
TMX翻译记忆库三类数据问题解决求助
我正在开发一款基于PHP、MySQL、JavaScript的浏览器端TMX(翻译记忆交换)文件编辑器,可读取XML格式TMX文件并导入数据库,核心字段为sourceText(源文本)和targetText(目标译文)。当前遇到三类数据问题,无法得到与Heartsome TMX Editor(Java版)一致的结果,寻求解决方案:
1. 重复项:sourceText与targetText完全相同的多行数据
现有查询接近正确,但仍漏检一个Heartsome显示的结果,且需显示所有重复行而非仅首行:
SELECT * FROM `tmx_data` t1 WHERE EXISTS (SELECT 1 FROM `tmx_data` t2 WHERE t2.sourceText = t1.sourceText AND t2.targetText = t1.targetText LIMIT 1,1) ORDER BY sourceText
修正方案
通过分组统计先筛选出存在重复的文本对,再关联原表获取所有重复行:
SELECT t1.* FROM tmx_data t1 INNER JOIN ( SELECT sourceText, targetText FROM tmx_data GROUP BY sourceText, targetText HAVING COUNT(*) > 1 ) t2 ON t1.sourceText = t2.sourceText AND t1.targetText = t2.targetText ORDER BY t1.sourceText;
该查询通过GROUP BY+HAVING COUNT(*) >1精准定位所有重复文本对,再关联回原表即可输出全部重复行,避免漏检。
2. 目标文本不一致:同一sourceText对应不同targetText
现有查询在以下场景失效:同一源文本对应3个及以上不同目标译文、目标文本仅标点差异、目标文本仅单个字母差异:
SELECT t1.segmentID, t1.sourceText, t1.targetText FROM `tmx_data` t1 WHERE EXISTS (SELECT * FROM `tmx_data` t2 WHERE t2.sourceText=t1.sourceText AND t2.targetText <> t1.targetText) ORDER BY t1.sourceText;
修正方案
通过统计每个sourceText对应的不同targetText数量,筛选出数量大于1的源文本,再关联原表输出所有相关行:
SELECT t1.* FROM tmx_data t1 INNER JOIN ( SELECT sourceText FROM tmx_data GROUP BY sourceText HAVING COUNT(DISTINCT targetText) > 1 ) t2 ON t1.sourceText = t2.sourceText ORDER BY t1.sourceText;
COUNT(DISTINCT targetText)会精准统计每个源文本下的唯一目标译文数量,无论差异是多版本、标点还是单个字符,只要存在不同译文即可被筛选出来。
3. 源文本不一致:同一targetText对应不同sourceText
现有反转逻辑的查询无效果:
SELECT * FROM `tmx_data` t1 WHERE EXISTS (SELECT 1 FROM `tmx_data` t2 WHERE t2.sourceText <=> t1.sourceText AND t2.targetText = t1.targetText LIMIT 1,1) ORDER BY sourceText;
修正方案
复用第二个问题的逻辑,反转字段进行统计筛选:
SELECT t1.* FROM tmx_data t1 INNER JOIN ( SELECT targetText FROM tmx_data GROUP BY targetText HAVING COUNT(DISTINCT sourceText) > 1 ) t2 ON t1.targetText = t2.targetText ORDER BY t1.sourceText;
通过GROUP BY targetText+COUNT(DISTINCT sourceText) >1定位到对应多个不同源文本的目标译文,再关联原表输出所有相关行,确保结果准确。
内容的提问来源于stack exchange,提问作者cheeseus
相关产品推荐
相关产品推荐

