2010-01-21 55 views
2

我希望能夠篩選我的訂單的金額範圍和特定的user_id 預期的結果將只獲得指定用戶在某個特定數量範圍。獅身人面像:在多個領域篩選MVA

例如有一個ID爲1的訂單。用戶5對它的出價爲200. 現在,如果我想過濾,我將user_id過濾器設置爲5,並將金額設置爲150-250 。

如何配置sphinx能夠以這種方式進行過濾?

我有以下表格:

訂單:

+-------------+-----------------------+ 
| Field  | Type     | 
+-------------+-----------------------+ 
| id   | mediumint(8) unsigned | 
| title  | varchar(100)   | 
| description | text     | 
+-------------+-----------------------+ 

出價:

+--------------+-----------------------+ 
| Field  | Type     | 
+--------------+-----------------------+ 
| id   | mediumint(8) unsigned | 
| order_id  | mediumint(8) unsigned | 
| user_id  | mediumint(8) unsigned | 
| amount  | mediumint(9)   | 
+--------------+-----------------------+ 

我試過在獅身人面像的配置如下。但我無法將user_id設置爲前導。其結果是,我得到了所有訂單(在所有用戶的範圍內)出價的所有訂單,並且我獲得了用戶參與競標的所有訂單。

sql_attr_multi = uint amount from query; SELECT order_id as id, amount FROM bids 
sql_attr_multi = uint user_id from query; SELECT order_id as id, user_id FROM bids 

感謝

回答

2

這可能是更好的指數個別出價使用此功能。

sql_query = 
    SELECT 
    b.id 
    b.order_id 
    b.user_id 
    b.amount 
    o.title 
    o.description 
    FROM 
    bid b JOIN 
    order o ON b.order_id=o.id; 
sql_attr_uint = order_id 
sql_attr_uint = user_id 
sql_attr_uint = amount 

過濾器的基礎上的特定用戶:

SetFilter("user_id", array(5)); 

過濾器的基礎上從150至250的投標範圍:

SetFilterRange("amount", 150, 250); 

過濾器的基礎上順序ID:

SetFilter("order_id", array(1)); 

這些可以混合d根據需要進行匹配以選擇您想要查看的出價。現在索引使用出價ID,Sphinx會將它們作爲結果集返回給您,您可以在後續的MySQL查詢中根據需要使用它們。

+0

我知道它的工作方式。但必須創建2個索引。第一個索引保持原樣,並且user_id上的第二個索引獲取與指定用戶相關的所有訂單。謝謝! – 2010-01-21 23:08:51

+0

這真的是獅身人面像的美麗......您可以通過多種不同的方式爲您的數據編制索引,以便快速方便地訪問它的許多不同方面。 – 2010-01-22 13:59:26