2013-01-07 66 views
0

我無法將兩個查詢合併爲一個。如何將同一表的兩個查詢放在一起

查詢1:

SELECT * 
FROM (`text`) 
WHERE `text` LIKE '%TERM1%' ORDER BY `text`.`start` DESC 

查詢2:

SELECT *, 
    MATCH (col1, col2, col3) AGAINST ('%TERM2%' IN BOOLEAN MODE) AS relevance 
FROM `text` 
WHERE MATCH (col1, col2, col3) AGAINST ('%TERM2%' IN BOOLEAN MODE) 
     AND status=2 
ORDER BY `text`.`start` DESC 

任何建議將被接受。

表「文本」看起來像

+-------+--------+-------+------+------+ 
| col1 | col2 | col3 | text | id | 
+-------+--------+-------+------+------+ 
| name1 | place1 | date1 | val1 | 1 | 
| name2 | place2 | date2 | val2 | 2 | 
| name3 | place2 | date5 | val1 | 3 | 
| name4 | place4 | date4 | val5 | 4 | 
| name5 | place5 | date5 | val5 | 5 | 
: 
: 
| namex | placex | datex | valx | x | 
+-------+--------+-------+------+------+ 

我已經忘了寫,先查詢還必須通過啓動DESC訂購...

我希望像結果:字詞1 = VAL1和字詞2 = val5

+-------+--------+-------+------+------+ 
| col1 | col2 | col3 | text | id | 
+-------+--------+-------+------+------+ 

qery1結果:

| name3 | place2 | date5 | val1 | 3 | 
| name1 | place1 | date1 | val1 | 1 | 

QUERY2導致

| name5 | place5 | date5 | val5 | 5 | 
| name4 | place4 | date4 | val5 | 4 | 
: 
: 
| namex | placex | datex | valx | 1 | 
+-------+--------+-------+------+------+ 

感謝。

@PinnyM - 是表被命名爲text和表格內立柱text,unfortu,我必須採取項目與完整的數據庫,這是荒謬的,而且它是荒謬的去改變完整的代碼,因爲它是必要的或不表名稱的改變。

+2

通過「加入他們」你怎麼想的結果是什麼樣子?請不要告訴我你真的有一個名爲「'text」的表... – PinnyM

+0

只需要注意,如果您試圖將查詢與UNION運算符結合使用,那麼每個查詢都會返回相同數量的列。如果這不是你想要做的,你想如何加入查詢?什麼標準? – Melanie

+0

而且你不應該使用select *來執行任何將要投入生產的代碼。這是一個SQL反模式。 – HLGEM

回答

1

這是一種方式:

SELECT t.*, -1 as relevance 
FROM `text` t 
WHERE `text` LIKE '%TERM1%' 
union all 
SELECT t.*, MATCH (col1, col2, col3) AGAINST ('%TERM2%' IN BOOLEAN MODE) AS relevance 
FROM `text` t 
WHERE MATCH (col1, col2, col3) AGAINST ('%TERM2%' IN BOOLEAN MODE) AND status=2 
ORDER BY `text`.`start` DESC 
相關問題