我有两张桌子:posts
和post_translations
。一篇文章可以翻译成多种语言,其翻译存储在post_translations
表中。并非所有帖子都提供所有语言版本。
posts
:
+----+------+
| id | hits |
+----+------+
| 1 | 12 |
+----+------+
| 2 | 34 |
+-----------+
post_translations
:
+----+---------+--------+---------------+------+
| id | post_id | locale | title | body |
+----+---------+--------+---------------+------+
| 1 | 1 | en | Hello, world! | Hey. |
+----+---------+------------------------+------+
| 2 | 1 | es | ¡Hola, mundo! | Olé. |
+----+---------+--------+---------------+------+
| 3 | 2 | en | How are you? | Meh. |
+----+---------+--------+---------------+------+
我想SELECT
全部posts
按西班牙语排序-但是,由于并非所有帖子都以西班牙语提供,因此如有必要title
,我还想回退到英语。title
也就是说,ORDER BY title_with_fallbacks
在哪里title_with_fallbacks = [spanish title] || [english title]
。
我想我可以使用依赖子查询:
SELECT * FROM posts ORDER BY (SELECT name FROM post_translations
WHERE post_id = posts.id
ORDER BY FIELD(locale, 'es', 'en')
LIMIT 1)
但如果有数千个结果,这可能会很快变得令人讨厌。关于如何通过连接两个表或类似的东西来获得相同结果的任何聪明的想法?
(作为参考,我正在使用 Rails 插件globalize3,但我无法找到任何内置机制来完成这项工作。)