2012-06-10 42 views
1

我有一個多語言cms表,我需要一個UNION SELECT從所有語言中選擇表,反正我定義當前行來自巫婆表?是這樣的:如何在字段中使用表名在mysql中選擇工會選擇

SELECT *,lan=en FROM en_table UNION SELECT *,lan=fa FROM fa_table ... 

我知道,我可以用這個:

SELECT *,(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'en_table' LIMIT 1) As lan FROM en_table UNION ... 

但是這是愚蠢的想法,是這樣做的更好的辦法?

回答

1

使用單引號括起來一個字符串,用別名,如:

SELECT 
    *, 
    /* string literal 'en' */ 
    'en' AS lang 
FROM en_table 
UNOIN ALL 
    *, 
    /* string literal 'fa' */ 
    'fa' AS lang 
FROM fa_table 

有兩點需要注意:這是不明智的UNION查詢中使用SELECT *。要明確表示列,所以它們的順序是確定性的。

SELECT 
    col1, 
    col2, 
    'en' AS lang 
FROM en_table 
UNOIN ALL 
    col1, 
    col2, 
    'fa' AS lang 
FROM fa_table 

然後,如果可能的話,從長遠來看,你應該把所有這些表合併成一個,其中包括列識別的語言。這樣可以幫助您避免在稍後使用UNION複雜化。

+0

感謝您的建議 – IVIR3zaM

相關問題