我需要检索一个字段,只要它不是空的:
我有一个表格:计数器(主要),id(对于同一页面也是如此),文本,语言和其他字段:我有id和语言。
我需要用该语言搜索文本,如果它是空的,我需要英文文本。 例: - 0,1,你好,eng - 1,1,ciao,ita 在这种情况下,我需要检索“ciao”,但如果它是空的,我需要“你好”。
我该怎么办?
答案 0 :(得分:2)
好吧,我想你可以把意大利语(如果不是空的)和用英语和意大利语首先订购(如果有的话):
SELECT
text
FROM
<table>
WHERE
id = <page-id>
AND (
(
language = '<preferred-language-to-retrieve>'
AND
text IS NOT NULL
)
OR
language = '<fallback-language>'
)
ORDER BY
language = '<preferred-language-to-retrieve>' DESC
LIMIT 1
(未测试的)
使用意大利语的替换值,页面ID为75
的英语后备(假设表名为l10n
):
SELECT
text
FROM
l10n
WHERE
id = 75
AND (
(
language = 'ita'
AND
text IS NOT NULL
)
OR
language = 'eng'
)
ORDER BY
language = 'ita' DESC
LIMIT 1
答案 1 :(得分:1)
试试这个:
SELECT text
FROM table lcl
WHERE id=1 AND language='ita'
UNION ALL
SELECT text
FROM table eng
WHERE id=1 AND language='eng'
LIMIT 1
第一个选择应始终是语言特定检查,第二个选择将返回英文版本,如果使用限制1,您将只获得第一行。 如果缺少特定语言版本,您将在第二个选择,英语
中得到该值OR
SELECT
CASE WHEN
lcl.text IS NOT NULL THEN
lcl.text
ELSE
eng.text END AS text
FROM table eng
LEFT JOIN table lcl ON lcl.id=1 AND lcl.language='ita'
WHERE eng.id=1 AND eng.language='eng'
这将获得英文版本(因此假定它始终存在),如果它存在,则获取所选的langange版本。 在选择中,我们只需显示本地语言版本(如果它不为空)或英文版本(如果不是)。