Структурирование SQL-запроса на основе состояния нескольких флажков - PullRequest
2 голосов
/ 21 июня 2010

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

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

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

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

Еще один вопрос: что будет лучшим способом для реализации этого? Этот вид таблиц в порядке? Потому что пользователи будут иметь возможность изменить свои параметры и обновить свои

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 21 июня 2010

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

<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);

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

1 голос
/ 21 июня 2010

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

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

...