Сортировка товаров

Lestat621

Новичок
Есть запрос в MySQL, Получить все товары где бренд например 'htc' и 'apple', категория 'мобильники', а прайс ограничен от и до. В sql это будет выглядеть так:
PHP:
SELECT brand.title_b, product.title_p,product.price
FROM product, brand, selection
WHERE product.brand = brand.id AND product.selection = selection.id
AND selection.title_url = 'mobile' AND (brand.title_url = 'apple' OR brand.title_url = 'htc') AND (product.price BETWEEN '0' AND '13000')
А как можно это оформить в php/
Брендов может быть множество, как собственно и категорий.
Форму получать в гет или пост?
 

Lestat621

Новичок
А как тогда я могу получить данные, если чекбоксов более одного. То есть собрать все чекбоксы в один запрос я могу так:
PHP:
if(isset($_GET['search'])){
		$search = $_GET['search'];
		foreach($search as $word){
			echo $word;
		}
	}
Но как получить данные из ГЕТа для проверки. То есть например в гете у меня содержатся данные page, понятно что бы проверить на какой я странице я просто делаю проверку GET['page']. Как сделать проверку на чекбоксы(то есть проверить какие выбраны).
 

Lestat621

Новичок
Много всего понаписал и в большинстве лишнего. Все гораздо проще.
Как вставить дополнительный код в уже существующий запрос.
PHP:
SELECT * FROM table WHERE one = two /* как вставить код сюда */ORDER BY $order DESC LIMIT $start, $per_page
 

Фанат

oncle terrible
Команда форума
проверять чекбоксы не надо.

чтобы задать вопрос по формированию запроса, приведи здесь пример приходящих в скрипт данных и пример готового запроса, который ты бы хотел получить из этих данных.
повторяю: не черновик, а готовый, полностью рабочий, проверенный в консоли запрос.
 

Lestat621

Новичок
Как создать такой запрос я разобрался, но как сформировать это в строке url
PHP:
SELECT brand.title_b, product.title_p, product.id, product.description, product.price, product.img, selection.title_s 
		FROM product, brand, selection 
		WHERE product.brand = brand.id AND product.selection = selection.id 
		AND( selection.title_url = 'table' OR selection.title_url = 'mobile' ) 
		AND( brand.title_url = 'apple' OR brand.title_url = 'samsung' ) 
		AND (product.price BETWEEN '0' AND '1000000') 
		ORDER BY brand.title_b DESC LIMIT 0, 5
Дело в то что ORDER BY или DESC LIMIT получить легко
PHP:
if (isset($_GET['order'])){
	$order = $_GET['order'];
}else{
	$order = 'title_p';
}
а например selection уже сложнее так как это массив.
Я формирую все в переменную
PHP:
	if(isset($_GET['selection'])){
		$selection = "";
		$search_sellect = $_GET['selection'];
		foreach($search_sellect as $word_sellect){
			$where_list_sellect[] = " selection.title_url = '$word_sellect' ";
		}
		$where_claus_sellect = implode(' OR ', $where_list_sellect);
		$selection .= " AND($where_claus_sellect) ";
	}
но в url же я не могу просто вставить эту переменную.
 

Фанат

oncle terrible
Команда форума
не понял вопроса.
для чего надо вставлять "эту переменную в url"?

для чего вообще что-то форматировать в строке урл?
какая вообще задача? делать ссылки на другие страницы с этим поиском или что?
 

Фанат

oncle terrible
Команда форума
ты кстати, забыл форматирование строк добавляемых в запрос.
слышал о такой функции, как mysql_real_escape_string()?
 

Фанат

oncle terrible
Команда форума
какая разница - тестовый или не тестовый?
в тестовом РНР ты пишешь тоже без нужного форматирования, кавычек и скобок?

и на предыдущий вопрос ответь
 

Lestat621

Новичок
Я формирую запрос по поиску. Но так же после формирования запроса можно отсортировать, например по имени.
Для этого нужно нажать на ссылку:
PHP:
<span <?php if($order == '$order') echo "id='here'";?>><a href="<?=$_SERVER['PHP_SELF'].'?page=' . $pages . '&order=title_p';?>">Имя</a></span>
В данном примере при нажатии на "сортировать по имени" страница на которой в данный момент пользователь, не изменится, так как сохранена в переменной.
Но передать сюда данные из формы (чекбоксы) я не могу ибо это массив и в одну переменную не закинуть.
При нажатии сортировки или смены страницы, весь запрос меняется.
 

Lestat621

Новичок
http_build_query формирует массив: 0=table&1=mobile
а в url у меня: test.php?selection[]=table&selection[]=mobile
Функция http_build_query позволяет добавить перед индексом массива любое выражение, но не заменить его.
 

Фанат

oncle terrible
Команда форума
Функция http_build_query ничего никуда не добавляет.
она формирует строку запроса из массива.
если некто хочет поменять результирующую строку, то этот некто должен догадаться изменить исходный массив
 

Lestat621

Новичок
Вообще не втираю, и так и сяк и наперекосяк.
Если я изменю исходный массив, то для проверки:
PHP:
	if(isset($_GET['selection'])){
		$selection = "";
		$search_sellect = $_GET['selection'];
		foreach($search_sellect as $word_sellect){
			$where_list_sellect[] = " selection.title_url = '$word_sellect' ";
		}
		$where_claus_sellect = implode(' OR ', $where_list_sellect);
		$selection .= " AND($where_claus_sellect) ";
	}
У меня будет в строке Get уже другой вариант.
PHP:
<input type="checkbox" name="selection[table]" value="table" />Планшеты
В данном случае http_build_query образует: table=table&mobile=mobile
Соответственно в дальнейшем проверка if(isset($_GET['selection'])) уже не имеет смысла.
 

Lestat621

Новичок
Боюсь даже отвечать да, но да, я запихиваю в функцию $_GET['selection'] )

Кст на другом форму подсказали использовать запрос в посте и поместить результат в отдельную переменную которую можно в дальнейшем использовать. Правда как это реализовать я то же ни как не допру.
 
Сверху