MySQL - 我可以在SELECT中使用变量代替列名

时间:2013-03-17 16:59:29

标签: mysql

我有以下代码段来实现多语言网站。 想法是,根据用户的语言,我需要将单词“Man”翻译为“Hombre”

我的问题:在这里使用$ user_language而不是硬编码列名“西班牙语”是否有效。

代码:       // $ user_language(本例中为西班牙语)在登录网站后从其个人资料中传递

  SELECT $user_language 
  FROM TranslationTable 
  WHERE English=Man

TranslationTable:

  English     Spanish   French
  Man          Hombre    homme

由于 SW

3 个答案:

答案 0 :(得分:1)

我不相信您可以使用这样的变量,但您可以使用动态SQL构建查询。

但是,如果您有机会更改表结构,那么对您来说这可能是更好的选择。我建议将其拆分为以下表格:

Language (store your languages such as English, Spanish, etc):
LanguageId and LanguageName

LanguageTranslation (language translation lookup table):
LanguageId, TokenId, and Translation

Token (store your tokens - versus querying directly on the english translation):
TokenId and TokenName

然后您可以轻松地查询它:

SELECT Translation
FROM LanguageTranslation LT
   JOIN Language L ON LT.LanguageId = L.LanguageId
   JOIN Token T ON LT.TokenId = T.TokenId
WHERE L.LanguageName = 'Spanish'
    AND T.TokenName = 'Man'

答案 1 :(得分:1)

我不认为这应该是一个问题。我在列选择过程中使用了变量(根据所选语言的数据库字段前缀),它对我有用。

尝试一下,如果它不起作用,请将变量放在大括号{}中,你应该没问题

答案 2 :(得分:0)

你可以(毕竟它只是一个字符串),但是你需要注意注意 - 确保你在替换之前过滤了变量(filter_var效果很好:http://php.net/manual/en/function.filter-var.php