2017-02-12 1 views
0

Итак, я пытаюсь сделать опцию, которая будет сортировать результаты из базы данных. Я нашел способ сделать это, но я не уверен, что это лучше.Есть ли лучший способ сделать сортировку?

if(!isset($_GET['sort']) || $_GET['sort'] == 0) { 
    $userquery = $DBH->query("SELECT users.id, users.username, users.name, users.joined, users.usergroup, user_groups.group_title FROM users INNER JOIN user_groups ON users.usergroup = user_groups.id ORDER BY users.id ASC"); 
    $userquery->setFetchMode(PDO::FETCH_OBJ); 
} else { 
    if($_GET['sort'] == 1) { 
     $userquery = $DBH->query("SELECT users.id, users.username, users.name, users.joined, users.usergroup, user_groups.group_title FROM users INNER JOIN user_groups ON users.usergroup = user_groups.id ORDER BY users.username ASC"); 
     $userquery->setFetchMode(PDO::FETCH_OBJ); 
    } else if($_GET['sort'] == 2) { 
     $userquery = $DBH->query("SELECT users.id, users.username, users.name, users.joined, users.usergroup, user_groups.group_title FROM users INNER JOIN user_groups ON users.usergroup = user_groups.id ORDER BY users.name ASC"); 
     $userquery->setFetchMode(PDO::FETCH_OBJ); 
    } else if($_GET['sort'] == 3) { 
     $userquery = $DBH->query("SELECT users.id, users.username, users.name, users.joined, users.usergroup, user_groups.group_title FROM users INNER JOIN user_groups ON users.usergroup = user_groups.id ORDER BY user_groups.group_name ASC"); 
     $userquery->setFetchMode(PDO::FETCH_OBJ); 
    } 
} 

Есть ли лучший способ сделать это?

ответ

0

Нет необходимости повторять неотменяемые части запроса снова и снова. Просто поместите это в переменную и добавьте предложение ORDER BY к этой строке в зависимости от условия. Затем используйте строку в качестве параметра запроса.

$querystring = "SELECT users.id, users.username, users.name, users.joined, users.usergroup, user_groups.group_title FROM users INNER JOIN user_groups ON users.usergroup = user_groups.id ORDER BY "; 
switch($_GET['sort']) { 
    case 1: 
    $querystring.= "users.username ASC"; 
    break; 
    case 2: 
    $querystring.= "users.name ASC"; 
    break; 
    case 3: 
    $querystring.= "user_groups.group_name ASC"; 
    break; 
case 0: 
default: 
    $querystring.= "users.id ASC"; 
    break; 
} 

$userquery = $DBH->query($querystring); 
$userquery->setFetchMode(PDO::FETCH_OBJ); 
+0

Хорошо, проверено и работает. Благодарю. – dovlapsy

+0

Я отредактировал ответ, чтобы включить пример кода, используя оператор switch/case. Кроме того, перед запросом должен быть установлен режим выборки. – Connum

+0

Почему перед запросом? – dovlapsy

Смежные вопросы