我试图简化从关系数据库查询数据的方式,并且不知道从哪里开始。 有3个简单的表格。
PersonID,fName,lName
FriendshipID
FriendID,PersonID,FriendshipID
目前,我只是连续使用这些查询,然后使用php循环查看结果。
SELECT FriendshipID FROM tbl_friend WHERE PersonID=$x
SELECT PersonID FROM tbl_friend WHERE FriendshipID=$y AND PersonID <> $x
SELECT fName, lName FROM tbl_people WHERE PersonID=$z
真的很感激任何帮助。感谢
答案 0 :(得分:0)
首先,它的你的表tbl_friendship现在的方式没用,而tbl_friend中的id_friendship也没用,但我知道你只是在进行测试并仍在进行调整,使用SQL你可以这样做:
SELECT PE.fName, PE.lName
FROM tbl_people PE
JOIN tbl_friend FR ON FR.PersonID = PE.PersonID
WHERE PE.PersonID=$x
编辑: 查看问题的查询,我认为tbl_friend中的FK是PersonID,然后改变了这个。
EDIT2:
tbl_friendship
需要引用其他两个表的主键:
tbl_people
peopleid int PK
fname text
lname text
tbl_friendship
friendshipid int PK
peopleid int FK reference tbl_people.peopleid
friendid int FK reference tbl_friend.friendid
tbl_friend
friendid int PK
fname text
lname text
但是,如果您不这么认为,朋友也是人,那么:
tbl_people
peopleid int PK
fname text
lname text
tbl_friendship
friendshipid int PK
peopleid int FK reference tbl_people.peopleid
friendid int FK reference tbl_people.peopleid
这样朋友就在同一张桌子上
答案 1 :(得分:0)
最好保持标准化。你的tbl_friendship
表的方式是没用的。请尝试以下架构:
<强> tbl_people 强>
PersonID, fName, lName
<强> tbl_friendship 强>
FriendshipID, PersonID, FriendID
因此,如果你想选择PersonID = 1
的所有朋友,你可以使用它:
SELECT *
FROM
(
SELECT aa.PersonID, aa.Fname, aa.lName
FROM tbl_people AS aa
INNER JOIN tbl_friendship AS bb
ON aa.PersonID = bb.FriendID
WHERE bb.PersonID = 2
UNION ALL
SELECT aa.PersonID, aa.Fname, aa.lName
FROM tbl_people AS aa
INNER JOIN tbl_friendship AS bb
ON aa.PersonID = bb.PersonID
WHERE bb.FriendID = 2
) AS _aa
ORDER BY _aa.Fname