我必须使用给定的数据库。
我找到了这篇文章,但没有成功地根据我的需要调整它:
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”:
- request_value(第一选择,如果为TRUE则取subject1的这一行)
- fallback_value (如果 request_value 失败检查这个,如果 TRUE 采取这一行的 subject1)
- default_value(如果 request_value 和 fallback_value 失败,请检查此项,如果 TRUE 则取该行的 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
请问,如果这是不可避免的,是否有人可以给我 WHERE 语句,即使是 CASE 语句?
有没有更好(或更快)的方法来过滤表格?
先感谢您。