2

金額範囲と特定のuser_idで注文をフィルタリングできるようにしたいと思います。期待される結果は、指定されたユーザーが特定の金額範囲で入札した注文のみを取得することです。

たとえば、IDが1の注文があります。ユーザー5は200の金額で入札します。ここで、フィルターをかける場合は、user_idフィルターを5に設定し、範囲フィルターを150〜250の金額に設定します。

そのようにフィルタリングできるようにスフィンクスを構成するにはどうすればよいですか?

私は次のテーブルを持っています:

注文:

+-------------+-----------------------+
| 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

ありがとう

4

1 に答える 1

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クエリ内で必要に応じて使用できます。

于 2010-01-21T13:57:35.437 に答える