人脉系统中的人际距离关系的解决方案?

昨天提问过的一问题,
http://www.iteye.com/problems/13431

好友分为三种:
一度好友:用户的好友
二度好友:用户好友的好友
三度好友:用户好友的好友的好友

要将这三类好友的数量统计出来,如:

一度好友:10
二度好友:300
三度好友:3500

并在地图上标识每一个好友的地理分布,
然后还有将所有好友进行地区排行 ,

又有了新的问题:
做一用户搜索功能,搜索得出列表如下:

用户照片 用户名称 用户的一度好友数量 用户与你的人际距离
A照片 A 90 A->B->C->您

这里的"人际距离关系"是个很头疼的问题!

数据库设计涉及两张表:
用户表:
users

userid username .....
1 A
2 B
3 C

好友表

friends

userid friendid
1 2
1 3
2 1
2 3
3 1
3 2

这里搜索的话,该如何将"人际关系"表现出来呢?
我的想法是把相关的用户分布关系当成一个 "图",
进行广度优先查找:先遍历所有一度好友,二度好友,三度好友;为什么不是深度优先查找呢?打个比方说,我加了好友A\B,A也加了好友B,如果是深度优先的话,有可能搜索到B的关系是:我->A->B,就不是最优路径了..

但是单纯地靠搜索来实现好友关系的展现,搜索一度好友\二度好友还可以满足,三度好友的搜索就不是一个数量级的了...

各位大虾,可有好的解决方案?
如何能更好地实现人际关系距离的搜索?
[b]问题补充:[/b]
是三度以内的,只要查找到3度就可以了..
[b]问题补充:[/b]
A->B->C->您

就是查找到这个长度..

自己的id 1,朋友的id 2
A-B
select aid=1&fid=2

A-B-C A-D-C A-X-C 2表链接
select a1.aid=1&a1.fid=a2.aid&a2.fid=2

A-B-C-D A-C-B-D 3表链接

select a1.aid=1&a1.fid=a2.aid&a2.fid=a3.aid&a3.fid=2

自己实现广度或者深度优先搜索都要取出非常多的结果来计算,直接把这个计算的任务交给数据库去处理,数据库肯定会给出更好的处理方法.

如果你只要取出1条结果的话,可以加个limit语句,这样数据库在处理的时候它就只要找到1条就会返回,速度会快,所以不要取出所有结果,然后程序里面去取一条出来.

不知道你要求的人际关系距离有长度限制吗?无论多远都显示还是说只显示3度以内的?