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

相关问题