特定のデータベースを操作する必要があります。
この記事を見つけましたが、私のニーズに合わせることができませんでした:
http://weblogs.sqlteam.com/jeffs/archive/2003/11/14/513.aspx
私がしたいこと
私は MYSQL 5 と PHP 5.4 を使用しています。
データベースには、単一の行と同じ件名のローカライズされたエントリがあります。
テーブルの構造
+---+--------+------------+--------+----+-----+
|id |a |b |c |d |e |
+---+--------+------------+--------+----+-----+
|1 |aaa |German text |booked |0 |1 |
+---+--------+------------+--------+----+-----+
|2 |aaa |English text|booked |1 |0.25 |
+---+--------+------------+--------+----+-----+
|3 |aaa |French text |booked |2 |1 |
+---+--------+------------+--------+----+-----+
|4 |bbb |German text |free |0 |-0.25|
+---+--------+------------+--------+----+-----+
|5 |bbb |French text |booked |2 |1 |
+---+--------+------------+--------+----+-----+
|6 |ccc |German text |free |0 |-0.25|
+---+--------+------------+--------+----+-----+
|7 |ccc |English text|free |1 |0.5 |
+---+--------+------------+--------+----+-----+
|8 |ddd |German text |free |0 |-0.25|
+---+--------+------------+--------+----+-----+
|9 |ddd |Russian text|booked |5 |0.9 |
+---+--------+------------+--------+----+-----+
|10 |eee |Italian text|free |4 |1.2 |
+---+--------+------------+--------+----+-----+
|11 |eee |English text|free |1 |0.3 |
+---+--------+------------+--------+----+-----+
列:
a = subject
b = localized text
c = value
d = language-key
e = value
列「d」をチェックするために、最大 3 つの異なる言語値があります。
- request_value (最初の選択肢、TRUE の場合は subject1 のこの行を取得)
- fallback_value (request_value が失敗した場合はこれを確認し、TRUE の場合は subject1 のこの行を取得します)
- default_value (request_value と fallback_value が失敗した場合はこれをチェックし、TRUE の場合は subject1 のこの行を取得します)
- 3 つのチェックがすべて失敗した場合、subject1 の行は返されません。
すべての subject1 エントリの 1 つの行のみが返されるか、まったく返されない必要があります。
リクエストの例
request_value = 0 (German)
fallback_value = 1 (English)
default_value = 0 (German)
should return rows id = 1, 4, 6, 8, 11
request_value = 1 (English)
fallback_value = 1 (English)
default_value = 0 (German)
should return rows id = 2, 4, 7, 8, 11
request_value = 5 (Russian)
fallback_value = 1 (English)
default_value = 0 (German)
should return rows id = 2, 4, 7, 9, 11
WHERE ステートメントで条件を考え、CASE ステートメントを避けたいと考えています。
クエリ (プロトタイピング):
SELECT a, b
FROM table
WHERE
c = value1
AND (check conditions for d)
AND e > 0
これが避けられない場合は、CASEステートメントを使用しても、WHEREステートメントを誰かに教えてもらえますか?
テーブルをフィルタリングするためのより良い (またはより高速な) 方法はありますか?
前もって感謝します。