具有动态返回列名的mysql查询

时间:2016-11-16 11:42:40

标签: mysql

我有3个表,ProductsLanguagesProducts_translation

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

我有这个

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种语言,但它只检索一个字段名称'description',我希望它返回3(语言数),类似description_en, description_es, description_fr

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

1 个答案:

答案 0 :(得分: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中做起来并不容易,因此通常选择产品,在单独的查询中选择这些产品的所有翻译,并在数据库之外构建所需的结果更快。