Задать вопрос

Как отсортировать данные по значению из присоединённой таблицы в sphinx search?

Доброго времени суток.

Есть индекс (sphinx) с достаточно большим запросом (много присоединённых таблиц). Мне необходимо отсортировать данные по значению из присоединённой таблицы. В запросе я дописываю ORDER BY table.field DESC, но в PHP приходят неотсортированные данные. Я вычитал, что необходимо создать атрибут, но я не могу создать атрибут по значению из присоединённой таблицы. Может подскажете, как мне отсортировать данные?

Пример запроса:
SELECT c.id, c.icof, c.firma, a.textadr, \
r.textz, cc.value, cc.title, cai.description \
FROM companies as c \
LEFT JOIN addresses as a ON c.icof = a.icof \
LEFT JOIN rosformaf r ON c.rosformaf = r.kodzaz \
LEFT JOIN company_contacts as cc ON c.id = cc.company_id \
LEFT JOIN company_add_info as cai ON c.id = cai.company_id \
LEFT JOIN subscriptions as s ON c.id = s.company_id \
ORDER BY s.active DESC


Спасибо.
  • Вопрос задан
  • 2469 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Добрый день
То что вы скинули это запрос с помощью, которого Sphinx получает данные для построения индекса, и не имеет значения был ли данные отсортированы или нет.
Создавать атрибут для присоединённых таблиц можно(добавляется так же как и не для присоединённых таблиц)

В описании source добавите строку:
sql_attr_uint = subscriptionActive(или любой другой тип в зависимости от Ваших необходимостей)
И при индексации укажите сфинксу что он должен положить в атрибут subscriptionActive:

SELECT c.id, c.icof, c.firma, a.textadr, \
r.textz, cc.value, cc.title, cai.description \
,s.active AS 'subscriptionActive'\
FROM companies as c \
LEFT JOIN addresses as a ON c.icof = a.icof \
LEFT JOIN rosformaf r ON c.rosformaf = r.kodzaz \
LEFT JOIN company_contacts as cc ON c.id = cc.company_id \
LEFT JOIN company_add_info as cai ON c.id = cai.company_id \
LEFT JOIN subscriptions as s ON c.id = s.company_id \
ORDER BY s.active DESC


Теперь когда Вы будете формировать запрос к сфинксу укажите ему, что нужно сортировать по атрибут subscriptionActive и счастье придёт=)

А вообще в документации всё достаточно хорошо описано:
sphinxsearch.com/docs/current.html#attributes
Так же рекомендую к ознакомлению блог Игорья Чакрыгина:
chakrygin.ru
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы