Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 09:38   #1
ekspl0it
 
Регистрация: 18.06.2011
Сообщений: 3
По умолчанию Фильтр оборудования

Здравствуйте, есть таблица оборудования plant :
type
-------
name
-------
model
-------
year
-------
place
-------
gild
-------
Делаю форму для фильтрации оборудования по параметрам с таким запросом с помощью AND:

Код:
SELECT * FROM plant WHERE type='$type' AND model='$model' AND year BETWEEN '$year' AND '$year2' AND place='$place' AND gild='$gild'
Всё работает, но вот проблема в том если указаны не все параметры, а только например gild и model, то запрос не срабатывает. Если за место AND поставить OR запрос будет срабатывать, только будут выводиться строки в которых или gild или model равны, а нужно что бы и то и то было в строке. Подскажите как составить запрос что бы можно было выбирать не все параметры, а например два gild и name и что бы выводило только те строки в которых присутствуют оба значения?

Последний раз редактировалось ekspl0it; 13.05.2012 в 10:15.
ekspl0it вне форума Ответить с цитированием
Старый 13.05.2012, 09:59   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Текст условия выборки можно и динамически в программе формировать, не используя в условии не заданных параметров.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.05.2012, 10:14   #3
ekspl0it
 
Регистрация: 18.06.2011
Сообщений: 3
По умолчанию

Спасибо за подсказку, но сделал вот так:
Код:
SELECT * FROM plant WHERE (type='$type' OR '$type'='') AND (gildr='$gild' OR '$gild'='')
и так далее по параметрам.
Но мне кажется оно какое то не правильно что ли, хотя работает.

Последний раз редактировалось ekspl0it; 13.05.2012 в 10:24.
ekspl0it вне форума Ответить с цитированием
Старый 13.05.2012, 10:28   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В принципе условие правильное, но все эти OR серьёзно замедлят выполнение
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.05.2012, 12:06   #5
ekspl0it
 
Регистрация: 18.06.2011
Сообщений: 3
По умолчанию

Попробовал динамическое условие, получилось так:
Код:
....

$sql = "SELECT * FROM plant WHERE 1";
		if ($type != '')
		{
			$sql = $sql." AND type = '".$type."'";
		}
		if ($gild != '')
		{
			$sql = $sql." AND gild = '".$gild."'";		
		}
		if ($model != '')
		{
			$sql = $sql." AND model = '".$model."'";
		}
		if ($year != '')
		{
			$sql = $sql.' AND year = '.$year;
		}
....

$result = mysql_query($sql);
Всё вроде работает, только писанины много, у меня около 20 параметров на фильтр.
ekspl0it вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о замене оборудования kirusha26 Помощь студентам 0 05.12.2010 17:09
проверка состава оборудования Innka Win Api 4 15.06.2009 19:30
Слежение за целостностью оборудования BLACKheart Win Api 4 27.10.2008 08:17
Обзор оборудования XMack Win Api 3 21.10.2007 23:18