Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Фильтр по определенным критериям, как реализовать?


Автор: dexterx 8.9.2008, 22:58
Подскажите пожалуйста как сделать фильтр БД?
Например у меня есть такая mysql БД:

___________________________________
| id | name | model | volume | price | color   |
--------------------------------------------------------
| 0  | BMW |    X5    |  2000   |10000 | black  |
| 1  | Opel | Vectra |  1500   | 19000 | black  |
| 2  | Audi |   Q7     | 2500    |150000| white |
___________________________________|

Нужно отсортировать например по весу:

вес:
от 0 до 1500
от 1500 до 2000
< 2000

Дальше например, по цене:
до 10 000$
от 10 000 до 20 000$
от 20 000 до 100 000$
< 100 000$

Дальше по маркам:
BMW
OPEL
AUDI
FoRD
....и т.д.


тоесть чтоб выводилось все данные с БД, а уже когда мы
нажимаем на определенный фильтр то данные отфильтрововались
соответственно параметрам данного фильтра!!!
Такой фильтр есть на сайте: http://hotline.ua/gd/8
Помогите пожалуйста мне реализовать подобное.... 

Автор: bars80080 8.9.2008, 23:50
ну это можно сделать просто с помощью запросов

Код

select * from table order by volume
select * from table order by price desc
...
один файл скрипта, который в зависимости от пришедших get-переменных выбирает из БД список товаров в определённой сортировке

Автор: dexterx 9.9.2008, 00:22
Тоесть, я правильно понимаю?

<a href="../filtr.php?volume1=0&volume2=1500">от 0 до 1500</a>
<a href="../filtr.php?volume2=1500&volume3=2000">от 1500 до 2000</a>

а потом уже в файле filtr.php принимаешь их методом $_GET['volume']
и сортируешь БД соответственно полученных параметров?

а если клиент например хочет отсортировать по весу и + еще по цене,
как сделать чтоб сначала машины отсортировались по весу и с этих 
уже сортировались по цене?

Автор: bars80080 9.9.2008, 00:44
а это уже ссылки настраиваешь, так чтобы они работали как надо:

Код

<a href="?vol=1000">сортировка по весу от 1000</a>
<a href="?vol=2000">сортировка по весу от 2000</a>
<a href="?price=10000">сортировка по цене от 10000</a>
<a href="?price=20000&pricereverce=1">сортировка по цене от 20000 в обратном порядке</a>
<a href="?vol=1000&price=10000&ord1=price">сортировка по весу от 1000, по цене от 10000, вначале по цене</a>

// на приёме делается обработка:
Код

if(!empty($_GET['price']) && empty($_GET['reverce'])) $s = 'price>'.$_GET['price'].' order by price ';
if(!empty($_GET['price']) && !empty($_GET['reverce'])) $s = 'price<'.$_GET['price'].' order by price desc ';
...
if(!empty($_GET['price']) && !empty($_GET['vol'] && !empty($_GET['ord1']) && $_GET['vol'] == 'price') $s = 'price>'.$_GET['price'].' and volume>'.$_GET['vol'].' order by price, volume';

$sql = 'select * from table where '.$s;
ну, как видишь здесь убого, надо помозговать, чтобы запрос собирался более стройно и эффективно, но идея ясна

Автор: dexterx 9.9.2008, 18:14
Большое спасибо, буду сейчас пробовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)