Sphinx索引器自定义查询sql_attr_multi

时间:2010-11-23 20:55:18

标签: ruby-on-rails mysql sphinx thinking-sphinx

我设法查询获取特定用户朋友的所有朋友和朋友。我有一个用户表和友谊连接表。为简单起见,我们只要说users表只有一个主键。 friendships表有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的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 个答案:

答案 0 :(得分:2)

我对你的数据结构知之甚少,说这将100%有效,但我看到一个明显的问题:

WHERE用户. ID为= FOF . friend_id AND朋友. friend_id = FOF . USER_ID AND好友. {USER_ID {1}}

最后一部分,WHERE user_id = $ id是错误的。将sql_query_info属性添加到sphinx索引时,该语法有效,但不能添加到sql_attr_multi。

您对sql_attr_multi的查询应该选择id作为与主sql_query中的文档ID匹配的第一列。

sql_attr_multi的第二列是你要在attr中组合在一起的col。