0

私はウェブサイトで作業していて、次のような「items」というmysqlテーブルを持っています。

item_id | item

(2番目の列はitem_idを識別するためだけのものです。)

language1.phpでは、次のように、item_idとアイテム自体の名前を含む配列をlanguage1に格納します。

$items = array(
1 -> 'Apple',
2 -> 'Orange',
...
);

ユーザーの言語に応じて、正しい言語ファイルが含まれています。

items-array(<1000 items / array)のオートコンプリート入力ボックスが必要です。php( "search_array"またはこのような関数)を使用してlanguage1.phpの配列を検索するのは良い解決策ではないと思いますが、このシステムを維持してmysqlで検索する方法はないと思います。それ?

Webサイトのさまざまな言語をどのように保存し、検索可能にしますか?

mysqlの特定の列にすべての言語を保存する必要がありますか?

4

1 に答える 1

1

おそらく、次のitems_localizationような列を持つテーブルを追加します

item_id,
locale,
content, (in your base language of choice)
translation (the translated content)

への外部キーがitem_idあり、 に複合主キーがitem_id, localeあるか、 に自動インクリメント ID フィールドと一意のインデックスがありitem_id, localeます。一部の人々は、使用しているフレームワークのために、単一列の自動インクリメント主キーを使用することを好みます。そのため、これに該当する場合は、後者のソリューションを使用してください。

あるいは、より広いローカリゼーション ソリューションが必要な場合は、次のlocalizationような列を持つテーブルを作成できます。

localization_id,
locale,
content,
translation

あらゆる種類のローカリゼーションを保存できます。次に、 items_localization テーブルは、次のような列を持つ多対多結合テーブルにすることができます

item_id,
localization_id

結合クエリを実行して、探しているローカリゼーションを取得できます。最初に提案されたテーブル構造を使用する場合:

SELECT i.*, il.translation
FROM items AS i
INNER JOIN items_localization AS il on i.item_id = il.item_id
WHERE il.locale = ? AND il.translation LIKE "%?%"

現在のロケールを自分の値に置き換え、 をオートコンプリート検索フレーズに置き換えます?

于 2012-10-04T14:55:05.123 に答える