我的SQL代码有问题。这是:
SELECT fur.*, cat.overskrift, cat.ikon, cat.id AS categoryID, cat.language AS catLang
FROM furniture AS fur
LEFT JOIN furniture_translated AS fur_tra
ON fur_tra.furniture_id = fur.id
LEFT JOIN furniture_categories_translated AS fur_cat_tra
ON ((fur_cat_tra.category_id = fur.category AND fur_cat_tra.language = '".beforeDB($user_language)."')
OR (fur_cat_tra.category_id = fur_tra.category AND fur_cat_tra.language = '".beforeDB($user_language)."'))
LEFT JOIN furniture_categories AS cat
ON (
(fur.category = cat.id AND cat.language = '".beforeDB($user_language)."')
OR
(fur_tra.category = cat.id AND fur_cat_tra.language = '".beforeDB($user_language)."')
)
WHERE
(fur.language = '".beforeDB($user_language)."' OR fur_tra.language = '".beforeDB($user_language)."')
AND
(
((cat.heading LIKE '%".beforeDB($search)."%' AND cat.language = '".beforeDB($user_language)."') OR (fur_cat_tra.heading LIKE '%".beforeDB($search)."%' AND fur_cat_tra.language = '".beforeDB($user_language)."'))
OR
(
(fur.name LIKE '%".beforeDB($search)."%')
OR
(fur_tra.name LIKE '%".beforeDB($search)."%')
)
)
ORDER BY
cat.heading ASC, fur.name ASC
beforeDB是我在PHP中创建的一个函数..它返回mysql_real_escape_string()中的值。
$ search是用户在搜索时输入的字符串
$ user_language是访问者的语言代码。
网站是什么:
该网站有一个家具清单,是一个多语言的网站。应翻译家具和类别。应该有可能从每种语言中更改类别。一个例子:我希望有可能在英文版的厨房类别中放置一个架子,并让它在德国版本的浴室类别中。
我想要达到的目标:
为用户提供搜索选项,以便轻松找到他们正在寻找的家具。他们应该用他们的语言搜索家具。
问题是什么:
如果我翻译家具,我仍然可以搜索英文名称,当它被翻译成另一种语言时。例如,如果我有德语作为我的语言,我搜索英文名称;经过英语搜索,我会得到德国的家具。这应该是不可能的。
任何帮助将不胜感激。
答案 0 :(得分:0)
如果我正确地阅读了所有这些内容,你可以强迫“非英语”结果在英语之前加上ORDER BY
条款:
ORDER BY
fur_tra.language = beforeDB($user_language) DESC,
cat.header, fur.name
新子句将评估为一个简单的布尔值true / false,MySQL会将其视为1
和0
以进行排序。因此,与用户所选语言匹配的任何结果都将显示为1
,并通过DESC订购首先获得订购。