2010-12-27 5 views
0

2つのパラメータを持つmysqlデータベースのクエリを作成しています。クエリの完了後にmysqlの結果セットをソートする方法

それは基本的な検索ですが、問題は選択基準に基づいて結果の順序を並べ替えることです。 私は検索ボタンをクリックしたとブラウザが、私は満了日によってまたは私はクリックウィッヒボタンを依存価格によって設定されたこの特定の結果を注文したい結果セットをdisplayiedので、後。

//SELECTION DATA FORM 
    <form action="EVENTS_SELECTION.PHP"> 
    <select name="Type"> 
    <option value="">SPORT 
    <option value="">CULTURE  
    <option value="">LEISURE 
    <option value="">GASTRONOMY 
    </select> 

    <select name="WHERE"> 
    <option>ROME ALL 
    <option>ROME SOUTH 
    <option>ROME WEST 
    <option>ROME EAST 
    <option>ROME NORTH 
    </select> 

    <input type="submit" value="search"> 
</form> 

どうすればいいですか?ところで

function myComparer($a, $b) 
{ 
    if ($GLOBALS['SEARCH_TYPE'] == 'PRICE') 
    { 
     $valueA = floatval($a['price']); 
     $valueB = floatval($b['price']); 
    } 
    else ($GLOBALS['SEARCH_TYPE'] == 'EXPIRATION-DATE') 
    { 
     // time string to UNIX timestamp integer value 
     $valueA = strtotime($a['expiration_date']); 
     $valueB = strtotime($b['expiration_date']); 
    } 

    if ($valueA == $valueB) { 
     return 0; 
    } 

    return ($valueA < $valueB) ? -1 : 1; 
} 

include './get_search_type.php'; 
// is stored in array $GLOBALS['SEARCH_TYPE'] 

include './get_search_result.php'; xyz is the field name 
// is stored in array $GLOBALS['SEARCH_RESULT'][xyz] 

usort($GLOBALS['SEARCH_RESULT'], myComparer); 

:あなたが検索した後にソートしたい場合は おかげ ルカ

+0

提出することなく、結果をHTMLページで並べ替えることを意味しますか?または、あなたのページに結果を一定の順序で書きたいのですか?また、あなたの結果セットはどこですか?私は検索フォームのように見えます。 –

+3

検索クエリをやり直してみましょう。例えば、ajaxを参照してください。どのようにあなたの限界を処理しますか?結果は、あなたはデータベースが限界を遂行するための正しい場所だと思いませんか? – regilero

+1

ちょうど追加のORDER BY句で別のクエリを実行する –

答えて

0

あなたはusort()機能を使用することができます私の意見では、(はるかに簡単にthatsの)DBMSによってソートする動的なクエリを生成することをお勧めします:

if ($GLOBALS['SEARCH_TYPE'] == 'PRICE') 
{ 
    $query = "SELECT * FROM Products ORDER BY price;"; 
} 
else ($GLOBALS['SEARCH_TYPE'] == 'EXPIRATION-DATE') 
{ 
    $query = "SELECT * FROM Products ORDER BY expiration_date;"; 
} 
+0

それは、私たちが持っている多くの検索バリアントと同じくらい多くの回数だけ全体のクエリ文字列を入力してクエリを変更するのは非常に非効率的な方法です。なぜなら、部分だけで注文を変更しないといけないのです。そして、$ GLOBALS変数はここでは使用されません。それはむしろ$ _GETでなければなりません。 –

0

[サーバーサイド] ストアPHPのクエリ結果、以下のような配列へ:

// if you want to sort by column 'name', store them by format: $dataset[{pid}] = {name}; 
// pid name 
// 1 test1 
// 2 alpha1 
// 5 candy1 
while (...) // read query result 
{ 
    $dataset[$row['pid']] = new array($row['name'] => $row); 
}  
// now, use sort() 
sort($dataset); 

// then foreach array to get sorted data; 
foreach ($datasetas $key => $val) { 
    echo $val."\n"; 
} 

[クライアント側] JSON形式と応答でデータを読み込んで保存します。次に、あなたのページで、javascript json libraryを使ってそれらを並べ替えます。

+0

そして、ページがユーザーにすでに表示された後、この配列の使用は何ですか?! –

+0

名前を並べ替えた後、配列インデックスはpid(名前列ソート順)に並べ替えられます。私は自分のコードを編集します。 – erinus

+0

ポストディス多分ソートをする? – Mike

関連する問題