我有3个表,Products
,Languages
和Products_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'
的内容吗?
答案 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中做起来并不容易,因此通常选择产品,在单独的查询中选择这些产品的所有翻译,并在数据库之外构建所需的结果更快。