我设法查询获取特定用户朋友的所有朋友和朋友。我有一个用户表和友谊连接表。为简单起见,我们只要说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的索引器使用此查询?
提前感谢任何可以指明我正确方向的事情。
答案 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。