2014-03-18 106 views
0

這是一個簡單的問題,但我似乎無法弄清楚。所以我有這個解析搜索和分頁結果的代碼。效果很好。我在哪裏把ORDER BY放在這段代碼裏?

<?php 
require_once("models/config.php"); 
if (!securePage($_SERVER['PHP_SELF'])){die();} 
require_once("models/header.php"); 
define("NUMBER_PER_PAGE", 5); //number of records per page of the search results 

function pagination($current_page_number, $total_records_found, $query_string = null) 
{ 
    $page = 1; 

    echo "Page: "; 

    for ($total_pages = ($total_records_found/NUMBER_PER_PAGE); $total_pages > 0;  $total_pages--) 
{ 
    if ($page != $current_page_number) 
     echo "<a href=\"?page=$page" . (($query_string) ? "&$query_string" : "") .  "\">"; 

    echo "$page "; 

    if ($page != $current_page_number) 
     echo "</a>"; 

    $page++; 
} 
} 

$page = ($_GET['page']) ? $_GET['page'] : 1; 
$start = ($page-1) * NUMBER_PER_PAGE; 


$personid = ($_POST['personid']) ? $_POST['personid'] : $_GET['personid']; 
$firstname = ($_POST['firstname']) ? $_POST['firstname'] : $_GET['firstname']; 
$surname = ($_POST['surname']) ? $_POST['surname'] : $_GET['surname']; 

$sql = "SELECT * FROM persons WHERE 1=1"; 

if ($personid) 
$sql .= " AND personid='" . mysqli_real_escape_string($mysqli,$personid) . "'"; 

if ($firstname) 
$sql .= " AND firstname='" . mysqli_real_escape_string($mysqli,$firstname) . "'"; 

if ($surname) 
$sql .= " AND surname='" . mysqli_real_escape_string($mysqli,$surname) . "'"; 


$total_records = mysqli_num_rows(mysqli_query($mysqli,$sql)); 


$sql .= " LIMIT $start, " . NUMBER_PER_PAGE; 

pagination($page, $total_records, "personid=$personid&firstname=$firstname&surname=$surname"); 



$loop = mysqli_query($mysqli,$sql) 
or die ('cannot run the query because: ' . mysqli_error($mysqli,i)); 

while ($record = mysqli_fetch_assoc($loop)) 
echo "<br/>{$record['personid']}) " . stripslashes($record['firstname']) . " - {$record['surname']}"; 


echo "<center>" . number_format($total_records) . " search results found</center>"; 

pagination($page, $total_records,  "personid=$personid&firstname=$firstname&surname=$surname"); 

?>

不過,我想我的搜索結果按姓氏排序。所以我修改一行代碼就可以說了:

$sql = "SELECT * FROM persons WHERE 1=1 ORDER BY surname"; 

然後我的,當我做了一個名字,我得到的所有記錄的搜索,完全排序按姓氏。我試過把ORDER BY放在其他地方,但是搜索不起作用。

爲了得到按姓氏排序的正確過濾結果,ORDER BY條件必須去這裏嗎?

感謝您的幫助提前。

回答

2

您正在尋找這樣的事情?

$sql .= " ORDER BY surname"; 
$sql .= " LIMIT $start, " . NUMBER_PER_PAGE; 

只是你需要在你的SQL查詢的您正在構建年底追加「ORDER BY」語句的問題?

+0

是的,那正是我遇到的問題。你的建議像魅力一樣工作 - 謝謝! – JLA

-1

嘗試:

$sql = "SELECT * FROM persons WHERE 1=1 ORDER BY surname DESC"; 

或:

$sql = "SELECT * FROM persons WHERE 1=1 ORDER BY surname ASC"; 
0

什麼是你的代碼怎麼了?它返回記錄結果無序或它產生錯誤? ORDER BY的位置是正確的,所以也許有對SQL查詢

一個小建議一個錯誤,標籤<center>被棄用HTML5,CSS使用

+0

OK前添加順序,因爲它代表貼出的,它返回的結果是無序的。但是,當我更改$ sql =「選擇*從人員1 = 1」;到$ sql =「選擇*從人的地方1 = 1 ORDER BY surname」;搜索簡單地返回一個排序列表,但沒有搜索條件將適用。 – JLA

+0

ORDER BY在'AND personid = 1'之前的位置對你來說似乎是正確的嗎? – mishu

+0

我沒有在AND子句之前看到任何ORDER BY,現在我正在閱讀代碼,在$ sql中沒有ORDER BY –

1

$sql .= " LIMIT $start, " . NUMBER_PER_PAGE;

$sql .= " ORDER BY surname"; 
$sql .= " LIMIT $start, " . NUMBER_PER_PAGE;