2013-12-11 87 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从... –