拼命寻找解决方案。我有基本的表和翻译表,并且需要选择加入,但是当没有翻译时 ->选择默认的lang Translation。
我有表products
&products_tr
。
产品:
----- ------- ------------- -----------------------------------------------------------------|id |库存|可见|category_id | ----- ------- ------------- -----------------------------------------------------------------|10 |5 |1 |1 ||1 |0 |1 |2 ||5 |2 |1 |2 | ----- ------- ------------- -----------------------------------------------------------------
products_tr :
------------- ------- ---------------- |product_id |lang |名称| ------------- ------- ---------------- |10 |en |蓝色汽车||10 |ES |Carro Azul ||1 |en |红色汽车||5 |en |黄色汽车| ------------- ------- ----------------
需要:
- 选择lang
'en'
=>将使用'en'
翻译返回行 - 当选择lang
'es'
=>时,如果可能的话,将使用'es'
返回行,如果不是=>返回'en'
。
谢谢。
一种解决方案将是JOIN
翻译表两次:
SELECT p.*, COALESCE(t1.name, t2.name) name
FROM products p
LEFT JOIN products_tr t1 ON t1.product_id = p.id AND t1.lang = 'es'
INNER JOIN products_tr t2 ON t2.product_id = p.id AND t1.lang = 'en'
LEFT JOIN
尝试带来与es
转换相对应的记录,而INNER JOIN
选择默认值。然后COALESCE()
调用返回es
翻译(如果有),否则默认。