2016-11-16 55 views
-1

我有3个表,Products,LanguagesProducts_translation带动态返回列名的mysql查询

如何在一个查询中同时检索一个产品和所有翻译?

我有这个

SELECT p.*, pt.description FROM Products p 
LEFT JOIN Products_translation pt ON p.id=pt.product_id 
LEFT JOIN Languages l ON pt.language =l.code 

我有3种语言,但它只能获取一个字段名称“描述”,我想它返回3(语言的数量),喜欢的东西description_en, description_es, description_fr

可以制作类似pt.description AS 'description'+'l.code'的东西吗?

+3

请分享表格结构 – VishalChaturvedi

+0

我已经添加了他们 – F79

回答

2

这是一个非常常见的问题,我相当肯定它已被多次回答(例如:Mysql: joining tables for translation records)。无论如何,如果你只有3种语言,只是这样做:

SELECT p.*, pt_en.description as description_en, pt_es.description as description_es, pt_fr.description as description_fr FROM Products p 
LEFT JOIN Products_translation pt_en ON (p.id=pt.product_id and pt.language = 'en') 
LEFT JOIN Products_translation pt_es ON (p.id=pt.product_id and pt.language = 'es') 
LEFT JOIN Products_translation pt_fr ON (p.id=pt.product_id and pt.language = 'fr') 

如果有3个以上,或不同数量,搜索旋转透视表获取更多信息。在SQL中做这件事并不容易,所以通常选择产品会更快,在单独的查询中选择这些产品的所有翻译,并在数据库之外构建所需的结果。

+0

谢谢,但我想要的只是在不知道语言值 – F79