Структурирование SQL-запроса на основе нескольких флажков

Я делаю поиск в ресторане, в котором пользователи могут фильтровать поиск по многим критериям …

У меня три таблицы:

Table1 - **Restaurant** ------+----------+---------- id + name + place ------+----------+---------- 1 Rest1 Ny 2 Rest2 La 3 Rest3 Ph Table2 - **r_type** ------+----------+---------- id + name + code ------+----------+---------- 1 type1 0 2 type2 1 3 type3 2 4 type4 3 Table3 - **type_stack** ------+----------+---------- id + rest_id + type ------+----------+---------- 1 2 2 2 4 1 3 1 2 

Теперь люди могут искать ресторан с type1 и type2 или только один тип и т. Д. Как я могу генерировать запросы, основываясь на состоянии флажка, которое пользователь выбрал. Как это делается в php? Будут около 7-12 флажков.

Другой вопрос – какой будет лучший способ реализовать это? Это такие таблицы? Поскольку у пользователей будет возможность изменить свои параметры и обновить их

Результаты с использованием ajax. Таким образом, загрузка сервера будет больше.

спасибо

Solutions Collecting From Web of "Структурирование SQL-запроса на основе нескольких флажков"

Назовите свои флажки примерно так:

 <input type="checkbox" name="chk[]" value="1" /> <input type="checkbox" name="chk[]" value="2" /> 

и т. д., где значения являются идентификаторами из Таблицы 1. Когда пользователь нажимает кнопку отправки, POST будет содержать значения отмеченных флажков.

В вашем PHP вы имеете

 $chkArr = isset($_POST['chk']) ? $_POST['chk'] : array(); $chkArrCSV = implode(',',$chkArr); 

Затем вы можете создать свой запрос как

 $sql = 'SELECT blah FROM blah WHERE id IN '.mysql_real_escape_string($chkArrCSV); 

и все, что вам нужно для дезинфекции ввода пользователя.

я не уверен в моем синтаксисе sql, но вы можете снять флажок в качестве параметров, а затем поместить свой запрос и где вы можете сделать что-то вроде:

 from ... where (somecolumn = @check1 or @check1 is null) and (somecolumn2=@check2 or @check2 is null) 

Я думаю, это будет хорошим решением для вас.

Надеюсь, поможет