如何根据列中的搜索设置 MySQL 中的排序优先级?

How to set priority on order by in MySQL based on search in columns?

我正在做简单的 MySQL 查询,例如:

SELECT * FROM `table` WHERE col1 LIKE = '%text%' OR col2 LIKE = '%text%'

我需要做的是首先对在 col1 中找到搜索文本的所有结果进行排序,然后我需要对在 col2 中找到搜索文本的结果进行排序。

您可以使用 UNION,分别得到 Select 个结果,然后将它们合并。此外,Union 将确保删除重复项(同时符合两个条件的行)。如果您还想要重复项,请使用 UNION ALL.

检查以下内容:

SELECT * 
FROM `table` 
WHERE col1 LIKE = '%text%' 

UNION 

SELECT * 
FROM `table` 
WHERE col2 LIKE = '%text%'

如果不确定正确的顺序,您可以合并(对于不同的结果)并为顺序添加一个显式列

    select col1, col2, col3, .... , coln 
    from (
            SELECT col1, col2, col3, .... , coln , 1 my_order 
            FROM `table` 
            WHERE col1 LIKE = '%text%' 

            UNION 

            SELECT col1, col2, col3, .... , coln , 2  
            FROM `table` 
            WHERE col2 LIKE = '%text%' 
        ) t
    order by my_order 

或对所有重复值合并

    select col1, col2, col3, .... , coln 
    from (
            SELECT col1, col2, col3, .... , coln , 1 my_order 
            FROM `table` 
            WHERE col1 LIKE = '%text%' 

            UNION ALL

            SELECT col1, col2, col3, .... , coln , 2  
            FROM `table` 
            WHERE col2 LIKE = '%text%' 
        ) t
    order by my_order 

在数字上下文中,布尔值被视为整数,其中 0false1 为真,因此您可以按这些术语排序:

SELECT   *
FROM     `table`
WHERE    col1 LIKE '%text%' OR col2 LIKE '%text%'
ORDER BY col1 LIKE '%text%' DESC