有一个选项表,我正在尝试使用英语默认值(languageID 1)创建多语言。
表格:

 optionID   optionName  optionValue  languageID
 -----------------------------------------------
 1          opt1        Language     1-1
 2          opt1        Language     2-2
 3          opt2        Language     1-1

查询:
SELECT t3.optionName,
       t3.optionValue
  FROM (SELECT t2.optionName,
               t2.optionValue
          FROM tbl_options t2
         WHERE t2.optionName IN ('opt1', 'opt2')
           AND (t2.languageID = 2 OR t2.languageID = 1)
      ORDER BY t2.languageID DESC) t3
GROUP BY t3.optionName

如果找不到匹配项,那么上面的查询是否是基于languageID检索行的最佳方法默认为1?
只是想确保我不会太复杂。

最佳答案

这是在假设英语是最低语言ID的情况下工作的:

select t.optionName, t.optionValue
from (
    SELECT optionName, max(languageID) as MaxLanguageID
    FROM tbl_options
    WHERE optionName IN ('opt1', 'opt2')
        AND languageID in (1, 2)
    group by optionName
) tm
inner join tbl_options t on tm.optionName = t.optionName
    and tm.MaxLanguageID = t.LanguageID
order by t.optionName

关于sql - MySQL,如果列等于?,则选择行否则选择使用默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4431330/

10-14 18:35