SQL - 搜索表单中的多个表

时间:2013-12-20 16:18:08

标签: php mysql sql

我的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是访问者的语言代码。

网站是什么:
该网站有一个家具清单,是一个多语言的网站。应翻译家具和类别。应该有可能从每种语言中更改类别。一个例子:我希望有可能在英文版的厨房类别中放置一个架子,并让它在德国版本的浴室类别中。

我想要达到的目标:
为用户提供搜索选项,以便轻松找到他们正在寻找的家具。他们应该用他们的语言搜索家具。

问题是什么:
如果我翻译家具,我仍然可以搜索英文名称,当它被翻译成另一种语言时。例如,如果我有德语作为我的语言,我搜索英文名称;经过英语搜索,我会得到德国的家具。这应该是不可能的。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了所有这些内容,你可以强迫“非英语”结果在英语之前加上ORDER BY条款:

ORDER BY
   fur_tra.language = beforeDB($user_language) DESC,
   cat.header, fur.name

新子句将评估为一个简单的布尔值true / false,MySQL会将其视为10以进行排序。因此,与用户所选语言匹配的任何结果都将显示为1,并通过DESC订购首先获得订购。