Сфинкс: сортировка по диапазону ассоциации - PullRequest
0 голосов
/ 04 октября 2011

Допустим, у меня есть отношение 1: много:

Дерево: яблоки

У каждого дерева / Apple есть столбец идентификатора первичного ключа, а у яблока есть некоторый атрибут / столбец даты (made_at).

Используя sphinx, я хочу получить все деревья, отсортированные по количеству яблок, созданных за определенный период времени.Так, например:

Все деревья, отсортированные по общему количеству яблок, созданных в период с 01.01.2010 по 01.01.2011.

Возможно ли это?

1 Ответ

0 голосов
/ 04 октября 2011

Итак, у вас есть две таблицы

create table tree ( tree_id int unsigned primary key,...);

и

create table apple ( apple_id int unsigned primary key, tree_id int unsigned, created_at timestamp default current_timestamp,...);

Так может тогда просто построить индекс по яблокам

sql_query = select apple_id,tree_id,unix_timestamp(created_at) as created_at from apple

затем запустите группу по запросам

$cl->setGroupBy('tree_id',SPH_GROUPBY_ATTR,'@count DESC');

Виртуальный атрибут @count даст вам количество яблок на этом дереве.

для установки фильтра

$cl->setFilterRange('created_at',strtotime('2010-01-01'),strtotime('2011-01-01'));

Кроме того, поскольку вы не используете его, вы можете присвоить ему рейтинг

$cl->setRankingMode(SPH_RANK_NONE);

Для ясности просто используйте пустой запрос

$res = $cl->Query('',$index);
...