Для начала:
$searchSQL = "SELECT * FROM jsprofile INNER JOIN medi WHERE ";
... допустимо только в MySQL, где INNER JOIN, в котором отсутствуют критерии для связывания таблиц, интерпретируется как CROSS JOIN - создание декартового произведения. Это означает, что он будет производить строки, но будет каждая запись medi
, связанная с каждой таблицей jsprofile
, и наоборот.
Пока есть записи, основанные на критериях поиска, запрос будет возвращать результаты - но только не хорошие. Поэтому вам придется объяснить «ничего не выходит» для полезного ответа ...
Второй, используя:
$searchSQL = "SELECT * FROM jsprofile ... WHERE 1 = 1 ";
... позволит вам объединять дополнительные предложения WHERE, если они начинаются с "AND ...":
$types[] = isset($_GET['sicno'])?" AND `name` LIKE '%{$searchTermDB}%'":'';
... без необходимости уже определенной вами логики.
В-третьих, использование Полнотекстового поиска (FTS) было бы проще и быстрее, чем использование LIKE с подстановочными знаками слева, потому что подстановочный знак слева от LIKE отображает любой индекс в столбце непригодным для использования. Тем не менее, MySQL FTS требует, чтобы поиск таблиц выполнялся с использованием механизма MyISAM. Для достижения той же функциональности используйте сторонние инструменты, такие как Sphinx.
WHERE MATCH(column1, column2) AGAINST ($searchTerm)