【发布时间】:2018-09-21 22:24:57
【问题描述】:
我可以对我正在尝试执行的数据库查询使用帮助。我有一个包含单词或短语、产品 ID、语言 ID 和版本 ID 的表格。 version_id 是一个逗号分隔的列,因为同一个词可以在多个版本中使用,我尽量避免添加具有相同数据的另一行,除了不同的版本。
我正在尝试获取每个产品、版本和语言的字数。我遇到的问题是分隔 version_id,因为它是逗号分隔的列。有没有办法分别获取版本 1 和版本 2 中所有单词的计数?
我目前有这个查询,它可以工作,但它没有按逗号分隔列中的版本分隔。
SELECT COUNT( translation ) AS translations, fdp.name AS product, fdv.name AS version, fdl.name AS language, fdl.position
FROM `fdnfortidictionary_dictionary` AS `fdd`
LEFT JOIN `fdnfortidictionary_product` AS `fdp` ON fdd.product_id = fdp.id
LEFT JOIN `fdnfortidictionary_version` AS `fdv` ON fdd.version_id = fdv.id
LEFT JOIN `fdnfortidictionary_language` AS `fdl` ON fdd.language_id = fdl.id WHERE fdp.enable = 1
AND fdd.product_id IN (1,2)
AND CONCAT( ",", fdd.version_id, "," ) REGEXP ",(1|2|3|4|5),"
GROUP BY `language`,`version`,`product`,`position`
ORDER BY fdl.position ASC
【问题讨论】:
-
最好的解决方案是首先不使用逗号分隔值。创建另一个表格,在单独的行中列出版本。
-
@Barmar 我有一张表格,列出了每个产品的版本。但是,如果新版本中出现相同的单词,这会不会导致冗余数据,还是无法避免?
-
另一个表应该只有两列,一个指向该表 ID 的外键和版本号。没有多余的数据。
-
@Barmar 感谢您提醒我.. 应该进行标准化的下一步!
标签: mysql