2013-12-11 82 views
0

我創建了一個mySQL查詢來搜索單詞並通過相關性排序結果(Sortkey)。例如,如果我搜索「測試字」,我的查詢看起來像這樣(和它的作品就像一個魅力):MySQL - 與RLIKE和GROUP BY聯合選擇 - 無法插入INNER JOIN

SELECT * 
FROM ( SELECT *, 1 as SortKey 
     FROM equipments 
     WHERE (
      DESCRIPTION RLIKE '[[:<:]]test word[[:>:]]' 
      OR EQUIPMENT_ID RLIKE '[[:<:]]test word[[:>:]]' 
      OR CATEGORY RLIKE '[[:<:]]test word[[:>:]]' 
     ) 

     UNION SELECT *, 2 as SortKey 
     FROM equipments 
     WHERE (
       (DESCRIPTION RLIKE '[[:<:]]test[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]test[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]test[[:>:]]' OR 
       DESCRIPTION RLIKE '[[:<:]]tests[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]tests[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]tests[[:>:]]') 

       AND 

       (DESCRIPTION RLIKE '[[:<:]]word[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]word[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]word[[:>:]]' OR 
       DESCRIPTION RLIKE '[[:<:]]words[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]words[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]words[[:>:]]') 
      ) 

     UNION SELECT *, 3 as SortKey 
     FROM equipments 
     WHERE (
       (DESCRIPTION RLIKE '[[:<:]]test[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]test[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]test[[:>:]]' OR 
       DESCRIPTION RLIKE '[[:<:]]tests[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]tests[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]tests[[:>:]]') 
       ) 
       OR (
       (DESCRIPTION RLIKE '[[:<:]]word[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]word[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]word[[:>:]]' OR 
       DESCRIPTION RLIKE '[[:<:]]words[[:>:]]' OR 
       EQUIPMENT_ID RLIKE '[[:<:]]words[[:>:]]' OR 
       CATEGORY RLIKE '[[:<:]]words[[:>:]]') 
      ) 

) T1 GROUP BY EQUIPMENT_ID ORDER BY `SortKey` ASC 

所以,正如我所說的,它的工作原理,但我想插入INNER中加入我的查詢,我試圖把它放在任何地方,沒有任何工作。通常情況下,以顯示所有結果,而不尋找關鍵字,我用這個查詢(再次,它工作正常):

SELECT 
    `equipments`.`DESCRIPTION`, 
    `equipments`.`EQUIPMENT_ID`, 
    `equipments`.`CATEGORY`, 
    `live_data`.`SERVICE`, 
    `live_data`.`HOURS` 
FROM equipments 
INNER JOIN customers ON `customers`.`EQUIPMENT_ID` = `equipments`.`EQUIPMENT_ID` 
LEFT JOIN live_data ON `live_data`.`EQUIPMENT_ID` = `equipments`.`EQUIPMENT_ID` 
WHERE `customers`.`customer_id` = 1 

我需要插入INNER JOIN也將WHERE語句搜索到客戶的設備只。請幫幫我!

回答

0
select innerresult.* From 
(Insert your query here) innerresult 
inner join customers On customers.equipment_id = innerresult.equipment_id 
Where customers.customer_id = 1 

我應該這樣做。

+0

謝謝!這正是我需要的! – pmrotule

+0

經過反思,我還需要從「live_data」表中獲取「SERVICE」和「HOURS」值。我在INNER JOIN行和WHERE行之間添加了「LEFT JOIN live_data ON live_data.EQUIPMENT_ID = innerresult.EQUIPMENT_ID」行,但我不知道如何選擇「service」和「hours」......我嘗試了幾件事情,但這並不成功...... – pmrotule

+1

選擇innerresult。*,live_Data.service,live_data.hours從... –