2013-01-07 65 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 
相关问题