Вы не должны хранить ключевые слова в такой строке.У вас должна быть отдельная таблица.
Если - по каким-то причинам, например, очень, очень, очень плохим проектным решениям кого-то другого, - вам приходится иметь дело с этими данными, а затем учитывать разделители.В MySQL я бы порекомендовал find_in_set()
для этой цели:
SELECT j.*
FROM jobs j
WHERE title LIKE '%UX%' OR
title LIKE '%UI%' OR
title LIKE '%Developer%' OR
FIND_IN_SET('HTML', REPLACE(keywords, ', ', '')) > 0 OR
FIND_IN_SET('CSS', REPLACE(keywords, ', ', '')) > 0
ORDER BY ( (title LIKE '%UX%') +
(title LIKE '%UI%') +
(title LIKE '%Developer%') +
(FIND_IN_SET('HTML', REPLACE(keywords, ', ', '')) > 0) +
(FIND_IN_SET('CSS', REPLACE(keywords, ', ', '')) > 0)
) DESC ;
Это находит точное совпадение по ключевому слову.
Вы можете упростить WHERE
, но не ORDER BY
, до:
WHERE title REGEXP 'UX|UI|Developer' OR
FIND_IN_SET('HTML', REPLACE(keywords, ', ', '')) > 0 OR
FIND_IN_SET('CSS', REPLACE(keywords, ', ', '')) > 0