我希望能够在金额范围和特定的user_id上过滤我的订单 预期结果是仅获得指定用户在特定金额范围内进行出价的订单。
例如,有一个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) |
+--------------+-----------------------+
我在sphinx配置中尝试了以下内容。但是我不能将user_id设置为leading。结果是,我获得了该金额范围内出价的所有订单(来自所有用户),并且我获得了用户进行出价的所有订单。
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
由于
答案 0 :(得分: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));
可以根据需要混合和匹配这些内容,以选择您想要查看的出价。既然索引正在使用出价ID,Sphinx会将它们作为结果集返回给您,您可以在后续的MySQL查询中根据需要使用它们。