我有一张桌子:

Visit (FromId, ToId, VisitTime)

其中fromid和toid是表的fks
UserProfile (uid, name, age ...)

作为一个使用我的uid的用户,我想选择我访问过的所有配置文件,或者在visittime命令的一个结果集中访问过我的人,并显示“访问方向”。
是否可以只使用一个mysql查询?

最佳答案

SELECT  CASE WHEN a.FromID = 'yourIDHere'
                THEN c.Name
                ELSE b.Name
        END Name,
        CASE WHEN a.FromID = 'yourIDHere'
                THEN c.Age
                ELSE b.Age
        END Age,
        a.VisitTime,
        CASE WHEN a.FromID = 'yourIDHere'
                THEN 'You'
                ELSE 'Friend'
        END DirectionOfVisit
FROM    Visit a
        INNER JOIN UserProfile b
            ON a.FromID = b.Uid
        INNER JOIN UserProfile c
            ON a.ToID = c.Uid
WHERE   'yourIDHere' IN (a.FromID, a.ToID)
ORDER   BY a.VisitTime

简要说明:
查询将显示您访问过的或曾经访问过您的朋友的姓名,还将显示访问的方向。当它显示You时,表示您访问了朋友的个人资料,否则如果朋友访问了您,它将显示Friend
SQLFiddle Demo

09-26 17:42