$construct .= "'role_category_1' || 'role_category_2' || 'role_category_3' || 'role_category_4' OR preferedlocation LIKE '%$search_each%'";
в MySQL конкатенация выполняется с помощью функции CONCAT () - вы выполняете битовые OR
операции над строками, поэтому ваша конструкция обрабатывается как:
string || string || string || string LIKE '%blahblahblah%'
, которая становится
0 || 0 || 0 || 0 LIKE '%blahblah%';
0 || (0 LIKE '%blahblah%')
0
Кроме того, поскольку вы помещаете одинарные кавычки вокруг имен полей, MySQL будет обрабатывать их как строки, а не как имена полей, поэтому вы фактически пытались сопоставить входную текстовую строку с фиксированной строкой, котораявыглядит как
role1_category1role_category2role_category3role_category4
Вы хотите
$construct .= "CONCAT(role_category1, role_category2, role_category3, role_category4) LIKE '%blahblah%'";
вместо.Обратите внимание на отсутствие кавычек вокруг имен полей.