私はさまざまなデータ型のカスタムフィールドをサポートするホスト型オンラインストア製品を持っています。追撃に切断、誰でものように定義されたテーブルに追加することにより、任意のレコードに余分なキー/値のペアを追加することができます。ヨーロッパではMySQLのロケールフォールバックにサブクエリを使用する
`storeId` varchar(20) NOT NULL,
`locale` varchar(100) NOT NULL,
`table` varchar(30) NOT NULL,
`id` varchar(50) NOT NULL,
`key` varchar(30) NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`storeId`, `locale`, `table`, `id`, `key`)
、多くの人々は、複数の言語をサポートしたいので、各キーが持つことができます異なるロケールの複数の値。各ストアには、デフォルトのロケール(ストア所有者によって指定される)とアクティブロケール(顧客によって選択される)があります。
ので、同様に、私は一緒に入れしようとしているクエリが動作します。アクティブなロケールとデフォルトのロケールがそうであるように
storeId
、table
とid
は、すべての知られています。- アクティブなロケールでキーの値を使用できない場合は、代わりにデフォルトのロケールの値が返されます。
- デフォルトのロケールの値も使用できない場合は、の値を他のロケールのに戻します。
私は、望みの結果を達成するかなり厄介なクエリを考え出しました。店舗IDが1
、テーブルがProducts
、IDがgadget1
であるとします。デフォルトロケールはen_AU
で、アクティブロケールはde_DE
です。クエリを実行するには、次のようにします。
SELECT * FROM
(SELECT `key`, `value`
FROM nf_CustomFields
WHERE `storeId` = 1
AND `table` = 'Products'
AND `id` = 'gadget1'
ORDER BY `locale`='de_DE' DESC,
`locale`='en_AU' DESC
)
AS a
GROUP BY `key`;
これはうまくいきますが、醜いですが、効率が悪いようです。私は良い方法があることを知っているが、私はそれに私の指を置くことはできません。
誰かが何か良いことを示唆できますか?
多くの感謝!
私はこれまで同様のことをしてきました。私はちょっと別にそれを設定した:各ものは、元の/デフォルトの言語をし、その後、一連の翻訳していた。そうすれば、3つ目の選択肢はありません。彼らの言語か、アイテムの母国語が得られます。 OTOH、 'en_AU'は英国で一定の魅力を持っています:) –
OKこれは、私がやっていたことは、とにかく最善のことだったことが判明しました。しかたがない。男は夢を見ることができます。 –