我是查询的初学者,我正在努力解决其中一个问题。以下是涉及的两个表:
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 ??谢谢 ;-) !!
答案 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
并且查询可能就像(你将获得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