MySQL,如果另一个是空的,我如何检索字段?

时间:2011-08-23 07:55:27

标签: mysql if-statement

我需要检索一个字段,只要它不是空的:

我有一个表格:计数器(主要),id(对于同一页面也是如此),文本,语言和其他字段:我有id和语言。

我需要用该语言搜索文本,如果它是空的,我需要英文文本。 例: - 0,1,你好,eng - 1,1,ciao,ita 在这种情况下,我需要检索“ciao”,但如果它是空的,我需要“你好”。

我该怎么办?

2 个答案:

答案 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版本。 在选择中,我们只需显示本地语言版本(如果它不为空)或英文版本(如果不是)。