と の 2 つのテーブルが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)
しかし、何千もの結果がある場合、それは厄介な速さになる可能性があります. 2 つのテーブルまたはそれらの線に沿ったものを結合して同じ結果を得る方法の巧妙なアイデアはありますか?
(参考までに、私は Rails プラグインglobalize3を使用していますが、この作業を行うための組み込みメカニズムを見つけることができませんでした。)