Запрос к базе данных с текстовым полем и флажками - PullRequest
0 голосов
/ 07 июня 2011

Сначала я провел целые дни, ища в интернете и пытаясь найти решение для себя, но безуспешно.

Так что теперь я здесь, чтобы попросить вас о помощи.

Сайт о парусных центрах.

У меня есть простая форма поиска с текстовым полем (город) и 4 флажками (клуб, школа, магазин, экскурсия).Это все также поля базы данных.

Table1 - sailingcenters

------+----------+----------+--------+--------+---------+-------

 id    name     city     club     school    shop     tour

------+----------+----------+--------+--------+---------+--------

   1      Sail1       City1     1         0        0        1

   2      Sail2       City2     1         1        0        0

   3      Sail3       City3     0         1        1        0 

Допустим, я хочу показать все клубы и школы в Марселе.

Итак, я набираю «Марсель» в поле «Город» и проверяю флажки «КЛУБ» и «ШКОЛА».(Я думаю, ясно, что вся эта информация была введена парусными центрами при регистрации)

Я хочу показать все парусные центры, которые являются одновременно CLUB и Schools, но также только школы или клубы.

Это ключевой момент.У меня в парусном центре могли быть оба, или просто клуб или школа.

Я не могу понять, как построить оператор выбора для решения этой проблемы.

Дело в том, что мне нужно объединить город и флажки в операторе выбора.Это то, что я не могу сделать.

Я хочу указать, что для флажков я создал 4 разных поля в базе данных.Это нормально?Или мне нужно создать только одно текстовое поле и использовать функцию IMPLODE для хранения и EXPLODE для извлечения данных?

Надеюсь, что все ясно.

Ответы [ 3 ]

1 голос
/ 07 июня 2011

OR должно быть заключено в скобки, я полагаю.

SELECT
  name
FROM 
  sailingcenters
WHERE 
  city = 'Marseille'
  AND
  (club = 1 OR school = 1)
1 голос
/ 07 июня 2011
SELECT
  name
FROM 
  sailingcenters
WHERE 
  (club = 1 OR school = 1)
  AND city = 'Marseille'

РЕДАКТИРОВАТЬ: Создайте свой запрос следующим образом:

$query = "SELECT * FROM sailingcenters WHERE city = 'Marseille' AND (0=1";
if ($_POST['club']=='ON')   $query .= ' OR club   = 1 ';
if ($_POST['school']=='ON') $query .= ' OR school = 1 ';
if ($_POST['shop']=='ON')   $query .= ' OR shop   = 1 ';
if ($_POST['tour']=='ON')   $query .= ' OR tour   = 1 ';
$query .= ')';
0 голосов
/ 07 июня 2011

Тривиальный html -> PHP -> пример оператора SQL

<form method=post>
<input type=checkbox name=club />

отправляет в обработчик формы обратной передачи, который включает в себя:

$and_clause = "AND ";

// for each of your checkboxes do:
if(isset($_POST['club'])){
$and_clause .= "CLUB = 1 OR ";
}

//then last of all do
$and_clause .= rtrim(" OR ", $and_clause);

Затем добавьте $ and_clause к вашему выражению sql

$sql = "SELECT
  name
FROM 
  sailingcenters
WHERE 
  city = 'Marseille' $and_clause";

Построение $ and_clause можно несколько автоматизировать, сверяя значения с белым списком, а затем ОБРАЩАЯ их, чтобы объединить строку, но приведенное выше должно дать вам идею - ЕСЛИ ваш вопрос действительно был «как сделать?»Я строю заявление sql? "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...