2017-03-29 82 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

感謝您的兄弟爲您解答 –