使用下拉选项设置MySQL查询的排序顺序


Set sort order of MySQL query using dropdown options

我希望允许站点用户更改由现有查询返回的结果的排序顺序。查询当前为

$searchList = 'select distinct pa.products_id, pd.products_name,
               p.products_model
               FROM ' . TABLE_PRODUCTS_ATTRIBUTES . ' pa
               left join ' . TABLE_PRODUCTS_DESCRIPTION . ' pd on (pa.products_id = pd.products_id)
               left join ' . TABLE_PRODUCTS . ' p on (pa.products_id = p.products_id)
               WHERE pd.language_id = ' . $language_id . '
               order by products_model';
我添加了以下代码来生成下拉菜单
<select id = "SortBy">
<option value ="">Please Choose<br>    
<option value ="products_model;">Model (asc)<br>
<option value ="products_model DESC;">Model (desc)<br>
<option value ="products_name;">Name (asc)<br>
<option value ="products_name DESC;">Name (desc)<br>
<option value ="products_id;">Product ID (asc)<br>
<option value ="products_id DESC;">Product ID (desc)
</select>

并将查询更新为

$searchList = 'select distinct pa.products_id, pd.products_name,
               p.products_model
               FROM ' . TABLE_PRODUCTS_ATTRIBUTES . ' pa
               left join ' . TABLE_PRODUCTS_DESCRIPTION . ' pd on (pa.products_id = pd.products_id)
               left join ' . TABLE_PRODUCTS . ' p on (pa.products_id = p.products_id)
               WHERE pd.language_id = ' . $language_id . '
               order by ".mysql_real_escape_string($sort)."';

在select选项之后和sql查询之前,我添加了

$sort=$_POST["SortBy"]

我认为它应该包含提交后所做的选择。

这是我有点卡住的地方。我希望用户能够从下拉菜单中选择他们的选项,并让它自动提交和存储的选择,以便查询下面使用他们的选择,但我不知道如何做到这一点。我假设某种类型的jQuery,但说实话,我迷路了,当它涉及到编码。

根据Jeff的意见,我将选择列表更改为

<select id = "SortBy" name="SortBy>
<option value ="">Please Choose<br>    
<option value ="model+">Model (asc)<br>
<option value ="model-">Model (desc)<br>
<option value ="name+">Name (asc)<br>
<option value ="name-">Name (desc)<br>
<option value ="prodid+">Product ID (asc)<br>
<option value ="prodid-">Product ID (desc)
</select>

并添加了以下代码

    switch ($_SESSION ['sba_sort_order']) {
    case 'model+' :
        $order_by = ' products_model; ';
        break;
    case 'model-' :
        $order_by = ' products_model DESC; ';
        break;
    case 'name+' :
        $order_by = ' products_name; ';
        break;
    case 'name-' :
        $order_by = ' products_name DESC; ';
        break;
    case 'prodid+' :
        $order_by = ' products_id; ';
        break;
    case 'prodid-' :
        $order_by = ' products_id DESC; ';
        break;

仍然失去了如何让这个自动触发和存储的结果为sql查询选择一个下拉尽管

首先,如果你想要某种"自动提交",你需要处理onChange事件,所以你的选择可以像下面这样:

<select id = "SortBy" name="SortBy" onchange="submitForm()">
jQuery风格

$("#SortBy" ).change(function() {
   //submit the form
});

当然,像Dojo, jQuery和其他的各种工具包(你提到了jQuery -在我看来,使用它们中的任何一个都是好的,至少对于跨浏览器的支持)都会帮助你做到这一点。

另外,考虑如何将数据发布到服务器:异步或非异步。

看看MVC并尝试以这种方式实现它。创建一个控制器来处理请求(它也可以验证请求,有些人更喜欢在模型级别上验证请求),创建一个模型来保存选择的选项,如果你想让它持久,并准备一个视图来与用户交互。它可能只是"您的选择已成功保存",但这实际上取决于您实际想要它的方式。