[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с сортировкой
Frost-56
Есть БД

user posted image

На сайте есть 4 переменные по которым надо сделать сортировку, но некоторые переменные могут оказаться пустыми. Как реализовать запрос?


SELECT * FROM inf_product ORDER BY upc DESK - так пробовал, читал статьи про order by, но так и не понял как он работает, допустим я хочу вывести на странице только element-red из столбца upc , как например это сделать?
depp
читайте про WHERE.
ORDER BY - это сортировка выборки.
SELECT * FROM inf_product WHERE upc = 'element-red'
Frost-56
Цитата (depp @ 8.12.2017 - 17:33)
читайте про WHERE.
ORDER BY - это сортировка выборки.
SELECT * FROM inf_product WHERE upc = 'element-red'

Точно, спасибо. А как запихнуть 4 переменные в запрос и что будет если одна из GET будет null ?
depp
... WHERE upc = 'element-red' AND location = 'ru' AND ...

если нул - то не ставите это поле в условие.
Frost-56
Цитата (depp @ 8.12.2017 - 18:06)
... WHERE upc = 'element-red' AND location = 'ru' AND ...

если нул - то не ставите это поле в условие.

Не понял как, он ошибку выдает если хоть один AND location = $loc отказывается пустым
walerus
Frost-56
Делаешь условие if ... else, тем самым составляя строку запроса, например:
$query_string = array();
if ( trim( $_GET['upc'] ) != '' ){ $query_string[] = trim( $_GET['upc'] ); }
if ( trim( $_GET['location'] ) != '' ){ $query_string[] = trim( $_GET['location'] ); }
....
// и так далее на все нужные переменные, потом собираешь это все в строку.
if ( !empty( $query_string ) ){
$query_string = implode( ' AND ', $query_string );
}

// и дальше вставляешь в свой запрос
SELECT * FROM inf_product WHERE $query_string

Только с кавычками не напутай.
Frost-56
Цитата (walerus @ 8.12.2017 - 23:53)
Frost-56
Делаешь условие if ... else, тем самым составляя строку запроса, например:
$query_string = array();
if ( trim( $_GET['upc'] ) != '' ){ $query_string[] = trim( $_GET['upc'] ); }
if ( trim( $_GET['location'] ) != '' ){ $query_string[] = trim( $_GET['location'] ); }
....
// и так далее на все нужные переменные, потом собираешь это все в строку.
if ( !empty( $query_string ) ){
$query_string = implode( ' AND ', $query_string );
}

// и дальше вставляешь в свой запрос
SELECT * FROM inf_product WHERE $query_string

Только с кавычками не напутай.

Спасибо болшьшое
Frost-56
Цитата (walerus @ 8.12.2017 - 23:53)
Frost-56
Делаешь условие if ... else, тем самым составляя строку запроса, например:
$query_string = array();
if ( trim( $_GET['upc'] ) != '' ){ $query_string[] = trim( $_GET['upc'] ); }
if ( trim( $_GET['location'] ) != '' ){ $query_string[] = trim( $_GET['location'] ); }
....
// и так далее на все нужные переменные, потом собираешь это все в строку.
if ( !empty( $query_string ) ){
$query_string = implode( ' AND ', $query_string );
}

// и дальше вставляешь в свой запрос
SELECT * FROM inf_product WHERE $query_string

Только с кавычками не напутай.

А как сделать если все перменные пустые? WHERE когда делать?
walerus
Цитата
А как сделать если все перменные пустые? WHERE когда делать?

Ну так стоит же проверка ...
if ( !empty( $query_string ) ){
$query_string = implode( ' AND ', $query_string );
}
может так будет понятнее:
if ( !empty( $query_string ) ){
// Формируется строка для запроса
$query_string = implode( ' AND ', $query_string );
}else{
// Выдается ошибка и скрипт останавливается
die( "Все переменные пустые. Ошибка..." );
}

Если переменные пустые, то WHERE делать не нужно... т.е. запрос вообще не должен уходить в базу, просто отдаешь результат "Пусто"...
Frost-56
Цитата (walerus @ 11.12.2017 - 18:03)
Цитата
А как сделать если все перменные пустые? WHERE когда делать?

Ну так стоит же проверка ...
if ( !empty( $query_string ) ){
$query_string = implode( ' AND ', $query_string );
}
может так будет понятнее:
if ( !empty( $query_string ) ){
// Формируется строка для запроса
$query_string = implode( ' AND ', $query_string );
}else{
// Выдается ошибка и скрипт останавливается
die( "Все переменные пустые. Ошибка..." );
}

Если переменные пустые, то WHERE делать не нужно... т.е. запрос вообще не должен уходить в базу, просто отдаешь результат "Пусто"...

Всё понял) спасибо большое еще раз)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.