MySQL SELECT:通过unicode查找所有语言

2024-05-17 01:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个相当棘手的(对我来说)SELECT语句,它将从语言定义数据库计算字体文件的所有支持的语言。你知道吗

字体的unicodes存储在“unicodes”列表中(我们使用的是Python)。 language DB有两列,一列带有语言名称,另一列带有整数形式的unicode,如下所示:

(language) - (unicode)
English - 97 #a
English - 98 #b
English - 99 #c
German - 97 #a
German - 98 #b
German - 99 #c
German - 228 #ä

我当前的SQL语句如下:

"SELECT DISTINCT language FROM languagedefinitions WHERE unicode = %s;" % (' OR unicode = '.join(map(str, unicodes())))

问题是,这将输出字体部分支持的所有语言。有Unicodes97-99的字体将同时输出英语和德语,而德语所需的unicode(228)在字体中丢失。你知道吗

我需要的只是那些完全受字体支持的语言,例如,一种语言的所有Unicode都出现在字体中。 如果字体中缺少一种语言的一个或多个Unicode(示例中为228),德语将不会出现。你知道吗

谢谢你!你知道吗


Tags: 文件语言数据库列表定义englishunicode字体
2条回答

NorthCat的纯SQL子查询解决方案可以工作,但比使用集合(0.0004s)的Python迭代实现要长得多(0.05秒):

from sets import Set
# First step, get all languages
languagenames = web.db.dbexec("SELECT DISTINCT language FROM languagedefinitions;")
# Second step, get all unicodes from one language and compare them against the font using sets.Set()
supportedLanguages = []
for languagename in languagenames:
    unicodesPerLanguage = web.db.dbexec("SELECT unicode FROM languagedefinitions WHERE language = '%s';" % (languagename))
    if Set(x[0] for x in unicodesPerLanguage).issubset(Set(unicodesInFont)):
        supportedLanguages.append(languagename[0])

可以使用子查询。通过子查询,我们选择字体中不包含Unicode的语言:

SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99)

然后选择子查询中未选择的所有语言。因此,完整查询将如下所示:

SELECT DISTINCT language FROM languagedefinitions WHERE language NOT IN (
    SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99);
);

相关问题 更多 >