Sphinx如何實現複雜Sql查詢

2021-10-10 11:08:12 字數 1565 閱讀 3279

sphinx可以實現複雜的sql語句,具體操作如下:

比如,要實現的sql語句為:select * from new_notes where ((status=100 &tmp_edit_status = 1) or status = 200 or status = 800 )  and title like '%測試%' and tmptype = 1 and create_time > 1000 and create_time < 9999999 order by create_time limit 0,10 ;

$sphinx->setmatchmode(sph_match_extended2);
2.配置取值區間:

$sphinx->setfilterrange('create_time',1000,'9999999');#可以設定多個
3.配置排序字段:

$sphinx->setsortmode(sph_sort_extended,'create_time desc');

#設定排序欄位及排序方式,第乙個引數是排序的模式,第二個引數為字段和排序方式desc或asc 注意:欄位和排序方式需要空格隔開

4.設定limit:

$sphinx->setlimits(0, 10, 1000);
$result = $sphinx -> query('((@status=100 & @tmp_edit_status=1) | @status=200  | @status=800 ) & @title(測試) & @tmptype = 1 『,"notes"); 

#語句的語法:@欄位名 判斷條件

#多個判斷條件之間用 & 或 | 連線

實現完整的**如下:

$sphinx = new sphinxclient();

$sphinx->setserver("***.***.xx.xx",***);

$sphinx->setmatchmode(sph_match_extended2);

$sphinx->setfilterrange('create_time',1000,'9999999');

$sphinx->setsortmode(sph_sort_extended,'create_time desc');

$sphinx->setlimits(0, 10, 1000);

$sphinx->setarrayresult(true);

$result = $sphinx -> query('((@status=100 & @tmp_edit_status=1) | @status=200 | @status=800 ) & @title(測試) & @tmptype = 1 『,"notes");

echo "query failed: " . $sphinx->getlasterror() . ".\n";

echo json_encode($result);

實現的關鍵在於對查詢語句的拆分,然後根據sphinx的屬性和方法進行拼接組裝。

如何降低SQL語句複雜度

sql語句複雜度的優化就是在結果正確的前提下,將複雜 難以維護的sql語句拆分成獨立 易懂的sql片段,當然也要充份利用索引,減少表描的i o次數,盡量避免表搜尋的發生。下面介紹降低sql語句複雜度的幾個建議 1 動態查詢語句 一些應用為了實現客戶端的靈活性,會根據使用者的選擇,動態拼出tsql語句...

sql複雜查詢

今天在review同事的 的時候,碰到乙個比較頭疼的資料庫查詢。例如,我想查列a的結果,但我要根據b列的值的情況來確定a列的輸出,說白了就是我可以自己控制得到的輸出。這個情況有兩種方法來實現。第一種是decode,這個關鍵字似乎只是oracle支援。而且也沒有解決我的問題,因為我覺得他類似於邏輯中的...

SQL 複雜查詢

近期碰到需要取日期最小的不同條件記錄的問題,請各位xdjm賜教!表a 表a 序號 材料 數量 入庫日期 1 a 8 2009 12 12 a 9 2009 12 53 b 12 2009 11 184 b 10 2009 11 195 c 5 2009 10 96 c 13 2009 11 8 想要...