Как установить приоритет порядка в MySQL на основе поиска по столбцам? - PullRequest
0 голосов
/ 23 сентября 2018

Я делаю простой запрос MySQL, например:

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

Что мне нужно сделать, это отсортировать все результаты, где искомый текст был сначала найден в столбце col1, а после этого мне нужно получить результаты, гдеискомый текст был найден в col2.

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

для неуверенного правильного порядка можно объединить (для отдельного результата) и добавить столбец объяснения для заказа

    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 
0 голосов
/ 23 сентября 2018

В числовом контексте логические значения обрабатываются как целые числа, где 0 равно false, а 1 равно true, поэтому вы можете просто упорядочить по этим терминам:

SELECT   *
FROM     `table`
WHERE    col1 LIKE '%text%' OR col2 LIKE '%text%'
ORDER BY col1 LIKE '%text%' DESC
0 голосов
/ 23 сентября 2018

Вы можете использовать UNION , чтобы получить результаты Выбрать отдельно и объединить их.Кроме того, Union обеспечит удаление дубликатов (строк, соответствующих обоим условиям).Если вам также нужны дубликаты, используйте UNION ALL.

. Проверьте следующее:

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

UNION 

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