0

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

用户和添加朋友

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?谢谢 ;-) !!

4

2 回答 2

1

您可以使用确保只返回朋友的标准加入:userID表格。例如:

SELECT u.*, a.Accept
FROM   askstobefriends a JOIN userTable u ON (:userID, u.colUserID) IN (
         (a.UserAsker, a.UserAsked),
         (a.UserAsked, a.UserAsker)
       )
于 2012-06-06T13:35:20.820 回答
1

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

User_User_ID 是 UserAsker。

User_USer_ID1 是 UserAskedtobefriend

在此处输入图像描述

并且查询可能像(您将获得 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
于 2012-06-06T13:46:12.407 回答