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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:27:37