加入循环关系(初学者)

时间:2012-06-06 12:27:58

标签: mysql

我是查询的初学者,我正在努力解决其中一个问题。以下是涉及的两个表:

UserAndAddFriends

askstobefriends表允许用户在我开发的应用程序中添加朋友。它的关系形式是:

AskToBeFriends(ID(长),#UserAsker(长),#UserAsked(长),接受(tinyInt))

因此,通过此表,我们可以看到谁被要求成为朋友,以及是否被接受......

我想要实现的查询将允许从他的ID中列出所有用户的朋友,并返回友谊法规(接受字段==>等待答案,接受或拒绝)。

Speretaly,它会是这样的:

SELECT Accept, UserAsker, UserAsked
FROM askstobefriends        
WHERE UserAsker = '".$userID."' OR UserAsked = '".$userID."' ";

==>第一个问题:它可以是要求与某人或对方成为朋友的用户,这就是为什么我要放和OR。在那之后,我希望每个成立的朋友都有这些信息:

SELECT colUserID, colUserLogin, colUserName, colUserFirstname
FROM userTable
WHERE colUserID == FRIEND

所以我想我需要做一个连接查询,并且在我的连接中我必须确保我在asktobefriends表中使用正确的外键来处理每个案例!! (一旦密钥可能是UserAsked,另一次是UserAsker,取决于谁要成为朋友:S)

有没有人有线索请:S ??谢谢 ;-) !!

2 个答案:

答案 0 :(得分:1)

您可以使用标准join来确保只返回:userID的朋友。例如:

SELECT u.*, a.Accept
FROM   askstobefriends a JOIN userTable u ON (:userID, u.colUserID) IN (
         (a.UserAsker, a.UserAsked),
         (a.UserAsked, a.UserAsker)
       )

答案 1 :(得分:1)

你的设计错了。用户要求成为另一个用户的朋友,因此“Ask_to_be_friend”是关系,基数是多对多,所以设计将如下所示:

User_User_ID是UserAsker。

User_USer_ID1是UserAskedtobefriend

enter image description here

并且查询可能就像(你将获得user_user_ID要求成为朋友的所有用户):

Select U.* from User as U
Join Ask_to_be_friend as A on
U.user_ID = A.User_user_ID 
--where a.accept=1  if you add this, this will give 
--you all the friends ID of the user_ID table User

如果您想获得被要求的朋友的姓名或额外信息,您需要额外加入

Select U.* from User as U
Join Ask_to_be_friend as A on
U.user_ID = A.User_user_ID
Join User as U2 on
A.User_User_ID1=u2.User_ID 
 --where a.accept=1 ,with this you'll with get only the friends