Как извлечь группу Sphinx по номерам из набора результатов? - PullRequest
0 голосов
/ 09 июня 2011

Мне нужна помощь по индексной группе Sphinx MySql.

У меня есть таблица продуктов, где у меня есть идентификаторы продуктов и соответствующие идентификаторы розничных продавцов.То, что я хочу сделать, это создать простой список, чтобы показать имена продавцов вместе с тем, сколько продуктов в таблице:

стандартный SQL: выберите retailerid, count (productid) как cnt из tblproducts Sphinxs:выберите * из группы tblproducts1 по retailerid

Я использую Sphinx 2.0.1-бета

Причина, по которой я хочу использовать Sphinx, заключается в том, что число продуктов будет отфильтровано по сложному совпадению, полномутекстовый запрос, название продукта, описание и т. д.

Теперь мой вопрос: как мне получить эти числа / идентификаторы из результата, возвращенного Sphinx?Поскольку я использую php для отображения результатов, мне бы хотелось, чтобы кто-нибудь показал мне полезный php-код для извлечения этих чисел из набора результатов.Массив результатов, возвращаемый Sphinx, сбивает меня с толку;Я нигде не вижу ссылки на количество товаров!

Я уверен, что Sphinx возвращает эти числа, поскольку он поддерживает группирование и подсчет, но как мне извлечь числа из набора результатов?

Ниже из моего конфигурационного файла:

sql_query       = \
    SELECT ProductId, ProductName, ProductModel, ProductDesc, ProductManf, ProductHeader, \
    ProductPrice, ProductPrePrice, ProductFetchDate, m.MerchantId, m.MerchantActive FROM tblproducts p \
    inner join tblmerchantlist m on p.MerchantId=m.MerchantId


sql_attr_uint       = MerchantActive
sql_attr_float      = ProductPrice
sql_attr_float      = ProductPrePrice
sql_group_column    = MerchantId

sql_query_info      = SELECT * FROM tblproducts WHERE ProductId=$id

ОБНОВЛЕНИЕ

Я бы ожидал, но я не вижу ссылку на счетв приведенном ниже наборе результатов.Должно быть, я где-то допускаю ошибки:

Array ( [error] => [warning] => [status] => 0 [fields] =>  
   Array ( [0] => productname [1] => productmodel [2] => productdesc [3] => productmanf [4] => productheader [5] => productfetchdate ) [attrs] =>
   Array ( [productprice] => 5 [productpreprice] => 5 [merchantid] => 1 [merchantactive] => 1 ) [matches] =>
   Array ( [0] =>
   Array ( [id] => 694173 [weight] => 396305 [attrs] =>
   Array ( [productprice] => 1568.48999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [1] =>
   Array ( [id] => 901921 [weight] => 396305 [attrs] =>
   Array ( [productprice] => 1533.48999023 [productpreprice] => 1536.98999023 [merchantid] => 12 [merchantactive] => 1 ) ) [2] =>
   Array ( [id] => 302573 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1059.98999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [3] =>
   Array ( [id] => 302579 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1179.98999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [4] =>
   Array ( [id] => 302592 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1429.48999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [5] =>
   Array ( [id] => 302595 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1592.98999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [6] =>
   Array ( [id] => 302597 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1129.98999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [7] =>
   Array ( [id] => 406798 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 2419.98999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [8] =>
   Array ( [id] => 407480 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1287.48999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) [9] =>
   Array ( [id] => 693715 [weight] => 249249 [attrs] =>
   Array ( [productprice] => 1234.98999023 [productpreprice] => 0 [merchantid] => 12 [merchantactive] => 1 ) ) ) [total] => 29301 [total_found] => 29301 [time] => 0.137 [words] =>
   Array ( [select] =>
      Array ( [docs] => 390 [hits] => 462 ) [from] =>
      Array ( [docs] => 4332 [hits] => 4637 ) [tblproducts1] =>
      Array ( [docs] => 0 [hits] => 0 ) [where] =>
      Array ( [docs] => 395 [hits] => 448 ) [match] =>
      Array ( [docs] => 108 [hits] => 111 ) [cyberpowerpc] =>
      Array ( [docs] => 66 [hits] => 132 ) [gamer] =>
      Array ( [docs] => 307 [hits] => 715 ) [xtreme] =>
      Array ( [docs] => 410 [hits] => 725 ) [1310lq] =>
      Array ( [docs] => 2 [hits] => 6 ) [in] =>
      Array ( [docs] => 16196 [hits] => 19786 ) [canada] =>
      Array ( [docs] => 1146 [hits] => 1200 ) [group] =>
      Array ( [docs] => 5716 [hits] => 5732 ) [by] =>
      Array ( [docs] => 2143 [hits] => 2289 ) [merchantid] =>
            Array ( [docs] => 0 [hits] => 0 ) 
   )
)

1 Ответ

0 голосов
/ 09 июня 2011

Существует магический атрибут @count, который добавлен в ваш набор результатов для этого запроса

select * from tblproducts1 group by retailerid

Список атрибутов в наборе результатов выглядит как

id, weight, MerchantActive, ... @groupby, @count

В случае, если вы используете опцию compat_sphinxql_magic = 0 в разделе searchd, вы явно определяете и псевдоним всех необходимых атрибутов, таких как

select *, weight(*) as w, count(*) as c from tblproducts1 group by retailerid

Список атрибутов в наборе результатов будет выглядеть как

id, MerchantActive, ... w, c
...