2017-02-12 6 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

関連する問題