2017-03-29 77 views
2

我正在动态创建基于搜索的搜索查询,我需要使用des | asc追加查询。根据条件(desc或asc)在MySQL查询后添加逗号

例如,如果用户单击bydate,我将追加order by bydate desc,如果用户想要搜索公司名称,我会追加order by companyname asc。这是在条件下完成的。

例如,如果查询是

select * from market 

,如果按日期查询用户搜索变得

select * from market order by bydate desc 

,如果通过公司名称查询的用户搜索变得

现在,如果前面的查询包含ascdesc我需要插入逗号,所以查询变成

select * from market order by bydate desc, companyname 

如果我不检查,并插入逗号查询变得

select * from market order by bydate desc companyname -- without comma 

因此,基于条件

$query = 'select * from market order by bydate desc'; 

    if( ($despos = false) && ( (strripos($query, 'desc') !=== false && ($despos = strripos($query, 'desc'))) || (strripos($query, 'asc') !=== false && ($despos = strripos($query, 'asc')) ) ) && $despost !===false && $despos >(strlen($query)-7) ) $query.=", "; 

插入逗号但查询显示以下错误:

(!) Parse error: syntax error, unexpected '=' in E:\wamp\www\sugumar\php\1.php on line 5

+0

在数组中添加您的所有订单,然后使用$ query = $ query.implode(“,”,$ orderBy); – shantanu

+1

也许它应该是'=='在条件而不是分配'='到$ despos var –

+0

也认为如果陈述是不正确的,它甚至告诉你问题是'='你不能有' ='带条件'&&'和'||' ''='或'==' – Gert

回答

4
$query = "select * from market"; 
$orderBy = array(); 

如果按日期

array_push($orderBy, "bydate desc"); 

如果公司名称查询

array_push($orderBy, "companyname asc"); 

if(count($orderBy) > 0) { 
    $query = $query." order by ".implode(",", $orderBy); 
} 
+0

谢谢辉煌 –

1

用户搜索假设你知道随参数的顺序和有效的排序顺序,你可以尝试这样的用户搜索:

$sortValues = [ 
    'bydate' => 'desc', 
    'companyname' => 'asc' 
]; 

$query = 'select * from market'; 

$count = count($sortValues); 
$index = 0; 
foreach($sortValues as $field => $sort){ 
    $index++; 
    $query .= sprintf(' order by %s %s %s', $field, $sort, $index < $count ? ',' : ''); 
} 
echo $query; 

结果:SELECT * FROM由bydate递减,为了市场秩序的公司名称ASC

+0

感谢您的兄弟为您解答 –