Mysql 从该表中获取具体结果
我有一张这样的桌子:(翻译) 我需要一个查询,它将得到如下结果:Mysql 从该表中获取具体结果,mysql,sql,Mysql,Sql,我有一张这样的桌子:(翻译) 我需要一个查询,它将得到如下结果: 所有NID都使用FR语言 所有使用英语的NID都是!=尼德神父 排序方式:先是FR语言,后是EN语言(可以是DE、RU、RO等语言) 对于上面的示例,它应该是这样工作的 NID LANGUAGE 1 fr 2 fr 3 fr 4 en 5 en 我尝试的是: SELECT nid, CASE WHEN language = 'fr' THEN 0 ELSE 1 EN
NID LANGUAGE
1 fr
2 fr
3 fr
4 en
5 en
我尝试的是:
SELECT nid, CASE WHEN language = 'fr' THEN 0 ELSE 1 END as new_language
FROM translations_tb
WHERE language in ('fr', 'en')
ORDER BY new_language ASC
这将首先按照我的动态语言对其进行排序,但我知道我不应该在('fr','en')中使用,但我无法确定应该做什么来排除来自en语言的重复NID。首先使用language='fr'设置条件,然后使用子查询为'en'添加条件,以排除使用'fr'语言的NID
select nid, language
from translations_tb
where language = 'fr'
or (language = 'en' and nid not in (select nid
from translations_tb
where language = 'fr'))
您可以通过nid对
进行分组
并获取max(language)
,如果该nid
同时存在两种语言,那么它将返回'fr'
,因为'fr'>'en'
。出于同样的原因,您可以按语言降序,将结果中的'fr'
放在第一位
SELECT nid,
max(language) language
FROM translations_tb
WHERE language IN ('fr',
'en')
GROUP BY nid
ORDER BY 2 DESC;
你说的“动态语言”是什么意思?你使用的是哪个版本的MySQL?它不能是de、ru、ro。这是唯一的fr或enBy动态语言,我的意思是,无论语言是什么(de、jp、ua),查询都会按照它进行排序。如果感兴趣的语言是
'de'
@Nick:的确如此,那么这个查询将不起作用。您必须将max()
更改为min()
并将DESC
更改为ASC
或什么都不更改(将'fr'
更改为'de'
)。
SELECT nid,
max(language) language
FROM translations_tb
WHERE language IN ('fr',
'en')
GROUP BY nid
ORDER BY 2 DESC;