2013-12-20 84 views
1

我的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()的值..
$搜索是搜索時,用戶輸入的字符串。
$ user_language是訪問者的語言代碼。

網站是:
該網站有一個傢俱的列表,是一個多語言的網站。傢俱和類別應該翻譯。應該有可能從每種語言改變類別。舉個例子:我希望可以在英文版的廚房裏放一個架子,讓它在德語版的浴室類別裏。

我想達到的目標:
有一個搜索選項,用戶可以輕鬆找到他們要找的傢俱。他們應該在他們的語言上搜索傢俱。

什麼問題是:
如果我翻譯傢俱,當它翻譯成另一種語言時,我仍然可以搜索英文名稱。例如,如果我有德語作爲我的語言,我搜索了英文名稱;在英文搜索後,我會收到用德語列出的傢俱。這應該是不可能的。

任何幫助,將不勝感激。

+0

我一次只能搜索一種語言。大多數人只會說一種語言,甚至多種語言的用戶(通常)會爲每種語言進行不同的搜索,因爲不僅單詞變化而且整個語境。你確定你必須堅持這種多語言搜索要求嗎? – jean

回答

0

如果我正確地讀了這一切,你也許可以迫使「非英語」的結果來英國之前,一個額外的ORDER BY條款:

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

新條文將評估一個簡單的布爾值true/false,MySQL會將其視爲10以進行排序。因此,任何符合用戶所選語言的結果都將以1的形式出現,並通過DESC順序首先進行排序。

+0

我不想強迫非英語結果出現在英語結果之前..我只想顯示您的語言的結果.. – Teskon

+0

那麼爲什麼要搜索未翻譯的結果呢?僅在fur_tra上搜索。 –

+0

由於原始傢俱數據位於毛皮表中。我想得到它,因爲某些數據在語言之間不可改變。翻譯時,我可以在毛皮桌上添加傢俱;我知道..原因是因爲那麼翻譯的傢俱將有另一個ID,並且我會在數據庫中使用不必要的MB數據。 – Teskon