Пользовательский запрос индекса Sphinx для sql_attr_multi - PullRequest
2 голосов
/ 23 ноября 2010

Мне удалось получить запрос на получение всех друзей и друзей друзей определенного пользователя.У меня есть таблица пользователей и таблица дружбы.Для простоты, давайте просто скажем, что таблица пользователей имеет только первичный ключ.В таблице дружбы есть столбцы user_id и friend_id.Запрос выглядит следующим образом:

"SELECT DISTINCT friends.user_id, friends.friend_id, users.*

  FROM FRIENDSHIPS friends, USERS 

  WHERE USERS.id = friends.friend_id AND friends.user_id = #{u.id}

  UNION

  SELECT DISTINCT fof.user_id, fof.friend_id, users.*

  FROM FRIENDSHIPS friends, FRIENDSHIPS fof, USERS

  WHERE USERS.id = fof.friend_id AND friends.friend_id = fof.user_id AND friends.user_id = #{u.id}"

u.id - это идентификатор пользователя, которого я хочу получить от всех друзей и друзей друзей.

Этот запрос работает очень хорошо, однако яхотел бы преобразовать это в запрос, используемый sphinx's sql_attr_multi.Я пытался разместить его так:

sql_attr_multi = uint fwfof from query; \
  SELECT DISTINCT `friends`.`user_id`, `friends`.`friend_id`, `users`.`id` \
  FROM `friendships` friends, `users` \
  WHERE `users`.`id` = `friends`.`friend_id` AND `friends`.`user_id` = $id \
  UNION \
  SELECT DISTINCT `fof`.`user_id`, `fof`.`friend_id`, `users`.`id` \
  FROM `friendships` `friends`, `friendships` `fof`, `users` \
  WHERE `users`.`id` = `fof`.`friend_id` AND `friends`.`friend_id` = `fof`.`user_id` AND `friends`.`user_id` = $id

, но это явно не удалось.

Как сделать этот запрос доступным для индексатора sphinx?

Заранее спасибо за всеэто укажет мне правильное направление.

1 Ответ

2 голосов
/ 24 ноября 2010

Я не знаю достаточно о вашей структуре данных, чтобы сказать, что это будет работать на 100%, но я вижу одну очевидную проблему:

WHERE пользователей . id = fof .friend_id AND friends . friend_id = fof . user_id AND friends . user_id = $id

Последняя часть, ГДЕ user_id = $ id неверна.Этот синтаксис работает при добавлении атрибута sql_query_info в индекс сфинкса, но не в sql_attr_multi.

Ваш запрос для sql_attr_multi должен выбрать идентификатор в качестве первого столбца, который соответствует идентификатору документа в основном sql_query.

Второй столбец sql_attr_multi - это столбец, который вы хотите сгруппировать в attr.

...