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

相關問題