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

관련 문제