OpenCart中包含数据库内容的语言回退

时间:2014-07-04 13:41:55

标签: sql opencart

我刚刚(6个月以上)开始学习所有的网络语言,主要是在OpenCart的框架内。现在我正在尝试使用语言回退来处理数据库内容。 目标是检查id.title中的空字段,如果是,请选择默认language_id=1

language_id来自前端用户调用的GET请求。 表description看起来像这样:

------------------------------------------------------
| information_id | language_id | title   | description |
------------------------------------------------------
| 3              | 1           | policy  | policy desc |
------------------------------------------------------
| 4              | 1           | about   | about desc  |
------------------------------------------------------
| 4              | 2           |         |             |
------------------------------------------------------
| 5              | 1           | terms   | terms desc  |
------------------------------------------------------
| 6              | 1           | comp    | comp desc   |
------------------------------------------------------

正如您所看到的,language_id=2没有标题也没有描述(由sql插入,而不是oc的管理员)。在这种情况下,我想获得具有默认language=1的行。

我尝试过使用CASE但结果总是空的。我无法找到解决方案的问题是检查请求的language_id旁边的标题字段。

在尝试SELECT之前,我还尝试先检查字段,但没有成功。

SELECT DISTINCT *
FROM information_description id
WHERE id.information_id = '4'
    AND id.language_id = (CASE WHEN id.title = '' THEN '1' ELSE '2' END);

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这里有两个选择。要么通过子选择执行,要么每次保存/更新执行所有信息描述,并使用默认语言更新缺少的语言。

第一个解决方案可能是:

SELECT id.information_id, id.language_id, id.description,
    CASE WHEN id.title IS NOT NULL /* or CASE WHEN id.title <> '' - depending on the real value in DB when it's empty */
        THEN id.title
        ELSE (SELECT title FROM information_description WHERE language_id = 1)
    AS title
FROM information_description id
WHERE id.language_id = 2

我只会在语言ID与默认ID不同的情况下调用此类查询。由于这可能看起来像工作解决方案,我不喜欢它只是因为它增加了数据库的工作量。

除此之外,我建议您以类似的方式更新您的遗失数据(这可能只能在您的生命中完成一次并完成):

UPDATE information_description id SET
    id.title = (SELECT title FROM information_description WHERE language_id = 1 AND information_id = id.information_id)
WHERE id.language_id <> 1
    AND id.title IS NULL

标题和

UPDATE information_description id SET
    id.description = (SELECT description FROM information_description WHERE language_id = 1 AND information_id = id.information_id)
WHERE id.language_id <> 1
    AND id.description IS NULL

用于描述字段......

相关问题