0

サイトで販売されているすべての製品を表示する製品ページがあり、横にリンクがあり、ユーザーが色などで結果を絞り込むことができます。したがって、「赤」のリンクをクリックすると、赤の製品のみが表示されます。データベース テーブルは、各色が「はい」または「いいえ」のいずれかの値を持つように設定されているため、リンクをクリックすると、クエリは次のようになります。

if(isset($_GET['color'])) {
  $color = filter($_GET['color']);
  $query = mysql_query("SELECT * FROM products WHERE $color='yes'") or die (mysql_error());
}

その後、製品を表示する while ループがあります。

<?php 
   while ($result = mysql_fetch_array($query)) {
     ...Display product info here...
   } 
?>

私が問題を抱えているのは、結果が返された後に結果をソートすることです。このページには、返された結果を「価格」および「最新」でソートするための追加のリンクがあります。これらの並べ替えリンクの使用方法のロジックに問題があります。

たとえば、「赤」のリンクをクリックすると、赤い商品しか表示されません。ここで、赤色の製品のみを価格順にソートする「価格」リンクをクリックできるようにしたいと考えています。結果が返された後に結果を並べ替えることができるかどうか、または追加の条件 ( ORDER BY price ) を使用してデータベースを再クエリするかどうかはわかりません。2 番目のケースが正しいアプローチである場合、前のクエリに条件を追加して DB を再クエリするにはどうすればよいですか? 誰でもこれで私を助けることができますか? 私はこれに数時間取り組んできましたが、運がありません!

4

2 に答える 2

0

JavaScript

次のようなものが必要です

http://tablesorter.com

PHP 、

値とasc / descをサーバー側に渡し、次のようにクエリします

"SELECT * FROM products WHERE $color='yes' 価格順"

pls は mysqli を使用します

于 2013-05-02T09:24:39.813 に答える
0

ORDER BY 句を追加してクエリをやり直すだけです。確かに、このような単純なクエリで。

ただし、結果を配列に読み取ってから、php usort 関数を使用してそれらを目的の順序に並べ替えることができます (ただし、便利にするには、ページを更新するたびに詳細を保存する必要があります)。クライアント マシン (ただし、すべてのデータをクライアントにダウンロードする必要があるため、ページングによる速度の向上が台無しになります)

そしてphp内でこれを行う例(テストされていないので、タイプミスを許してください):-

<?php

switch (true)
{
    case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'id' :
        $Details = $_SESSION['details'];
        usort($Details, 'id_sort');
        break;
    case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'name' :
        $Details = $_SESSION['details'];
        usort($Details, 'name_sort');
        break;
    case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'dob' :
        $Details = $_SESSION['details'];
        usort($Details, 'dob_sort');
        break;
    case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'home_town' :
        $Details = $_SESSION['details'];
        usort($Details, 'home_town_sort');
        break;
    default :
        $sql = "SELECT id, name, dob, home_town FROM Persons";

        $Query = $db->query($sql);

        $Details = array();

        while($row=$db->fetchAssoc($Query)) 
        {
            $Details[] = $row;
        }
        $_SESSION['details'] = $Details;
        break;
}

foreach($Details AS $aDetail)
{
    echo $aDetail['id']."\t".$aDetail['name']."\t".$aDetail['dob']."\t".$aDetail['home_town']."\r\n";
}

function id_sort($a,$b)
{
    $RetVar = 0;
    switch (true)
    {
        case $a['id'] > $b['id'] :
            $RetVar = 1;
            break;
        case $a['id'] < $b['id'] :
            $RetVar = -1;
            break;
        default :
            $RetVar = 0;
            break;
    }
    return $RetVar;
}

function name_sort($a,$b)
{
    $RetVar = 0;
    switch (true)
    {
        case $a['name'] > $b['name'] :
            $RetVar = 1;
            break;
        case $a['name'] < $b['name'] :
            $RetVar = -1;
            break;
        default :
            switch (true)
            {
                case $a['id'] > $b['id'] :
                    $RetVar = 1;
                    break;
                case $a['id'] < $b['id'] :
                    $RetVar = -1;
                    break;
                default :
                    $RetVar = 0;
                    break;
            }
            break;
    }
    return $RetVar;
}

function dob_sort($a,$b)
{
    $RetVar = 0;
    switch (true)
    {
        case $a['dob'] > $b['dob'] :
            $RetVar = 1;
            break;
        case $a['dob'] < $b['dob'] :
            $RetVar = -1;
            break;
        default :
            switch (true)
            {
                case $a['name'] > $b['name'] :
                    $RetVar = 1;
                    break;
                case $a['name'] < $b['name'] :
                    $RetVar = -1;
                    break;
                default :
                    switch (true)
                    {
                        case $a['id'] > $b['id'] :
                            $RetVar = 1;
                            break;
                        case $a['id'] < $b['id'] :
                            $RetVar = -1;
                            break;
                        default :
                            $RetVar = 0;
                            break;
                    }
                    break;
            }
            break;
    }
    return $RetVar;
}

function home_town_sort($a,$b)
{
    $RetVar = 0;
    switch (true)
    {
        case $a['home_town'] > $b['home_town'] :
            $RetVar = 1;
            break;
        case $a['home_town'] < $b['home_town'] :
            $RetVar = -1;
            break;
        default :
            switch (true)
            {
                case $a['name'] > $b['name'] :
                    $RetVar = 1;
                    break;
                case $a['name'] < $b['name'] :
                    $RetVar = -1;
                    break;
                default :
                    switch (true)
                    {
                        case $a['id'] > $b['id'] :
                            $RetVar = 1;
                            break;
                        case $a['id'] < $b['id'] :
                            $RetVar = -1;
                            break;
                        default :
                            $RetVar = 0;
                            break;
                    }
                    break;
            }
    }
    return $RetVar;
}

?>

これに関するアイデアは、詳細が保存されるということです(例ではセッション変数を使用しましたが、同様に、他の方法で保存することもできます)。詳細が見つかり、並べ替え順序が渡された場合は、usort を使用しますその詳細の配列をソートします。ソート順ごとに 1 つの関数が使用されるため、サブオーダーを変更することもできます (つまり、id は一意である必要があるため、それに基づいてソートできますが、この例のホームタウンはおそらく一意ではないため、その中の名前でソートします。そしてその中のid)。

そのレベルまで並べ替えを指定する必要はありませんが、この例では指定する価値があると思いました。

于 2013-05-02T09:36:18.893 に答える