Сфинкс GROUP BY - PullRequest
       1

Сфинкс GROUP BY

1 голос
/ 01 февраля 2010

Собираюсь проиллюстрировать это, пожалуйста, потерпите меня.

Это моя структура таблицы MYSQL, проиндексированная sphinx

------- ------- --------------
tag_id | tag   | foreign_id  |
------- ------- --------------
1       love     111
2       blue     222
3      lover     333
4       yellow   444
5       love     555
6       lov      666

То, что я пытаюсь получить от сфинкса, когда я спрашиваю "любовь", выглядит примерно так:

love = 2 hit
lover = 1 hit

Кто-нибудь знает, как это можно сделать? Я попробовал следующий php-код, но все, что он выводит, это просто связка tag_id для 'love'

$cl->setGroupDistinct('tag');
$cl->setGroupBy('tag', SPH_GROUPBY_ATTR);  
$cl->SetLimits( 0, 10, 500);
$result = $cl->query("love", 'mytags');

Я даже пробовал это, но это не сработало

$cl->setGroupDistinct('tag');

Я думаю, что группа Сфинкса может быть использована для решения этой проблемы, но я довольно невежественен. Помощь очень ценится! Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2016

Если вы хотите посчитать тег и порядок, необходимо добавить дополнительное предложение в функцию setGroupBy.

$cl->setGroupBy('tag', SPH_GROUPBY_ATTR,'@count desc');
$result = $cl->query('');
0 голосов
/ 01 февраля 2010

Не думаю, что вы хотите использовать setGroupDistinct для того же атрибута, по которому вы группируете. В терминологии SQL это было бы похоже на:

SELECT COUNT(DISTINCT tag)
FROM my_tags
GROUP BY tag

который, насколько я могу судить, будет возвращать только 1 совпадение для каждого тега.

Я думаю, что если вы просто удалите вызов на setGroupDistinct или измените отдельное поле на внешний идентификатор (таким образом, отфильтровывая несколько идентичных тегов, прикрепленных к одной записи), вам будет хорошо.

...