简化mysql查询

时间:2015-11-09 23:51:51

标签: mysql sql database

我试图简化从关系数据库查询数据的方式,并且不知道从哪里开始。 有3个简单的表格。

tbl_people

PersonID,fName,lName

tbl_friendship

FriendshipID

tbl_friend

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

真的很感激任何帮助。感谢

2 个答案:

答案 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表的方式是没用的。请尝试以下架构:

SQL Fiddle

<强> 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