如何在mysql中基于列搜索设置order by的优先级?

w6lpcovy  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(409)

我在做简单的mysql查询,比如:

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

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

lrl1mhuk

lrl1mhuk1#

您可以使用union来分别获取选择的结果,并将它们合并。也, Union 将确保删除重复项(符合这两个条件的行)。如果你也想要复制品,那么使用 UNION ALL .
检查以下各项:

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

UNION 

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

8wigbo562#

在数字上下文中,布尔值被视为整数,其中 0false 以及 1 是真的,所以你可以按以下条件订购:

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

nafvub8i3#

如果不确定正确的顺序,可以联合(用于不同的结果)并为顺序添加一个explict列

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

相关问题