Один из способов сделать это - использовать маркер, а затем ограничить результаты первым рядом. Пример использования UNION: -
SELECT 1 AS match_type, my_table.*
from my_table
where fromid = 1992
UNION
SELECT 2 AS match_type, my_table.*
from my_table
WHERE message like '%example%'
ORDER BY match_type
LIMIT 1
Недостатком является то, что он все еще вызывает относительно медленный неиндексированный запрос, используя LIKE с лидирующим подстановочным знаком.
Ниже приводится альтернатива. В большинстве случаев это было бы бессмысленно, но если ожидалось, что проверка идентификатора будет возвращать запись почти всегда, а проверка на LIKE - очень случайное условие (когда-либо возвращалась только одна запись), тогда это может быть целесообразно, так как это позволит избежать поиска условия «делать медленный LIKE» без необходимости.
SELECT COALESCE(id, SELECT MAX(id) from my_table WHERE message like '%example%') AS id,
COALESCE(fromid, SELECT MAX(formed) from my_table WHERE message like '%example%') AS formed,
COALESCE(message, SELECT MAX(message) from my_table WHERE message like '%example%') AS message
FROM
(
SELECT id, fromid, message
FROM (SELECT 1 AS a_cnt) sub0
LEFT OUTER JOIN
(
SELECT id, fromid, message
from my_table
where fromid = 1992
) sub1
) sub2