2013-11-26 165 views
1

我试图在表中搜索两列,即标题和描述。但我想先搜索标题然后再描述。所以匹配标题的所有行都会排在第一位,并且匹配描述的所有行都会排在第二位mysql:搜索两列:一列第一列然后第二列

我可以使用单个SQL查询来实现吗?

回答

0

您可以先做一个UNION并首先在标题中进行搜索,并为这些值分配一个0和1的列作为描述。然后你订购该栏:

SELECT col1,col2,col3 
FROM 
(SELECT col1,col2,col3 ,0 AS ord 
FROM table1 
WHERE title LIKE "%searchQuery%" 
UNION 
SELECT col1,col2,col3, 1 
FROM table1 
WHERE description LIKE "%searchQuery%" 
) a 
ORDER BY ord ASC; 

这样,与标题匹配的记录将首先出现。

0

您也可以使用case语句,因此它不必遍历整个表格两次。

SELECT col1,col2,col3, 
    Case 
    WHEN title LIKE '%searchQuery%' THEN 0 
    WHEN description LIKE '%searchQuery%' THEN 1 
    END 
    AS ord 
FROM table1 
WHERE ord is not null 
ORDER BY ord; 
0

我想这应该是有效的

SELECT COLA 
(
SELECT TITLE AS COLA, 'T' AS IND 
FROM TABLE 
UNION ALL 
SELECT DESCRIPTION AS COLA, 'D' AS IND 
FROM TABLE 
) 
ORDER BY COLA, IND DESC 
相关问题