用于存储和检索朋友列表的数据库和查询

时间:2011-11-21 06:29:25

标签: php zend-framework doctrine

我正在网站上开发一个模块来保存和检索朋友列表。我正在使用Zend Framework和DB处理我正在使用Doctrine(ORM)。

有两种型号:

1)存储所有用户的用户 2)存储好友列表的 my_friends (即用户M:M关系的参考表)

my_friends 的结构如下


... ID .......... user_ID的............ friend_id ........批准....
... 10 ......... 20 .................. 25 ................. ..1 ..........
... 10 ......... 21 .................. 25 ................. ..1 ..........
... 10 ......... 22 .................. 30 ................. ..1 ..........
... 10 ......... 25 .................. 30 ................. ..1 ..........


Doctrine 查询以检索

之后的好友列表ID
$friends = Doctrine_Query::create()->from('my_friends as mf')
                                 ->leftJoin('mf.users as friend')
                                 ->where("mf.user_id = 25")
                                 ->andWhere("mf.approved = 1");  

假设我正在查看用户编号-25 通过此查询,我只获得用户编号 - 30 其中用户编号 - 25 也是用户编号--20和21 的认可朋友。

请指导我,查找所有朋友的查询应该是什么,是否需要更改数据库结构。

YAML
    会员:
    专栏:

id:
  primary: true
  type: integer
  notnull: true
  autoincrement: true
userName:
  unique: true
  type: string(255)
Address_id:
  type: integer(4)
MemberPhoto_id:
  type: integer
 relations:
address:
  class: Address
  local: Address_id
  foreign: id
memberPhotos:
  class: MemberThumbnail
  foreignAlias: member
  local: MemberPhoto_id
  foreign: id

refPeeps:
columns:
id:
  primary: true
  unique: true
  type: integer
  autoincrement: true
Member_id:
  type: integer
  notnull: true
Peep_id:
  type: integer
  notnull: true
relations:
Member:
  local: Member_id
  foreign: id
Member:
  local: Peep_id
  foreign: id

4 个答案:

答案 0 :(得分:0)

我不是100%确定如何在Doctrine中表达这一点,因为我有一段时间没有使用它,但是你需要将my_friends加入到自己的friend_id = user_id。我当然可能误解你的数据库布局。如果我误解了您,请使用PHP架构或生成它的YAML文件更新您的问题。

答案 1 :(得分:0)

我不知道学说,你的查询可能就是这样。 如果您提供示例数据和示例结果,我可以帮助更好

SELECT *
FROM my_friend
LEFT JOIN users ON my_friend.friend_id = users.id
WHERE my_friend.user_id = 25

答案 2 :(得分:0)

根据你的表格,你应该收到的输出

由于您查询user_id,并且user_id = 25,因此只有一行

你有两种方法可以做你想做的事情

1)当你添加好友时,你应该创建两行,一行是user_id = 25,friend_id = 30,第二行是user_id = 30,另外一行是friend_id = 25

这有点难看,但在构建查询方面具有优势

2)第二种方式不需要任何数据库保存更改,但需要更改查询 您应该查询:

(user_id = 25或friend_id = 25)。不只是user_id

答案 3 :(得分:0)

- 您好Amrit。

- 我认为您需要使用两个查询来获取数据。据我说,你必须按照这些步骤

  1. 首先使用与friend_id相对应的连接查询获取所有数据。
  2. 第二次对user_id应用简单查询并获取数据。
  3. 然后获取与第二个查询对应的数据。