Основываясь на ваших комментариях, я вижу несколько проблем: вы используете ИЛИ вместо AND в вашем запросе, который является вашей основной проблемой.И выберет записи, которые имеют ВСЕ от указанных опций;ИЛИ выбирает любые записи, у которых есть какой-либо из параметров, даже если у них нет остальных.
$query1= "SELECT * FROM $tableName
WHERE category= '$category' AND genre='$genre' AND sub_genre= '$sub_genre'
LIMIT $start, $limit";
Во-вторых, если я правильно понимаю, вы хотите динамически строить оператор в зависимости от того, какие параметры
Проверьте значение каждого раскрывающегося списка и, если оно имеет значение, добавьте к предложению WHERE
$query1 = "SELECT * FROM $tableName WHERE [some condition thats always required]";
if (!empty ($category))
$query1 .= "AND category = '$category' ";
if (!empty ($genre))
$query1 .= "AND genre= '$genre' ";
[etc...]
$query1 .= "LIMIT $start, $limit;"
Если единственными условиями, которые есть в предложении WHERE, являются параметрызатем передайте сначала вам нужно проверить, есть ли переданные опции any , чтобы определить, нужно ли вам добавить ключевое слово "WHERE" в ваш запрос;а затем проверьте, какая из опций включена первой, чтобы вы не включали ключевое слово «И», если нет предыдущего условия для его добавления.Или вы можете обмануть и поставить произвольное условие, которое всегда истинно, например, «WHERE $ table_id> 0» (при условии, что в вашей таблице есть поле id)
Вы также должны вместо этого использовать числовые идентификаторы для параметровделать сравнения текста в вашей базе данных, которая является более неэффективной, но это совсем другое дело ...