SQL查询,从table2顺序中选择table2行

时间:2012-12-18 00:58:58

标签: mysql sql database

我正在尝试从表格中选择朋友列表,这样可以正常工作。但是现在我试图通过另一个表来订购结果,这是用户在线状态/最近的在线活动。

我尝试使用的查询是(错误是:'where子句'中的未知列'friendID'):

SELECT
    CASE WHEN f.userID=$session 
    THEN f.userID2 ELSE f.userID 
    END AS friendID
FROM friends f, usersStatus u
WHERE 
    (
           f.userID=$session OR f.userID2=$session
    ) 
    AND friendID=u.userID
    AND f.state='1' 
ORDER BY u.periodicDate DESC, u.setStatus ASC
LIMIT 5

现在只返回用户朋友的查询是:

SELECT
    CASE WHEN f.userID=$session 
    THEN f.userID2 ELSE f.userID 
    END AS friendID
FROM friends f
WHERE 
    (
           f.userID=$session OR f.userID2=$session
    ) 
    AND f.state='1' 
LIMIT 5

friendID应匹配usersStatus.userID,然后我想按照上面的示例中的方式对它们进行排序。我还想补充一点,如果friendID不是IN usersStatus表,它应该在结尾处自动排序这些行。

u.periodicDate只是用户设置的最新日期,因此这表示用户最后一次处于活动状态,因此我希望最近活跃的用户成为第一个。 u.setStatus的设置取决于我的脚本确定的内容,因此可以是1231Online2Away3Offline

就像我上面所说的那样,在这个表中还没有一行的用户应该自动获得offline状态。

修改

我有一个查询可以按照我想要的方式工作,但是它非常混乱并且必须非常浪费它的资源,因为我必须使用GROUP BY friendID才能返回用户一次。 (因为我的朋友数据库保留了每一行,所以如果一个人不和别人交朋友,只要他们回交朋友等就会创建一个新行。)

SELECT * FROM usersStatus,

(SELECT
    CASE WHEN friends.userID=$session 
    THEN friends.userID2 ELSE friends.userID 
    END AS friendID
FROM friends, usersStatus
WHERE 
(
     friends.userID=$session OR friends.userID2=$session
)

AND friends.state='1'
) t
WHERE t.friendID=usersStatus.userID 
GROUP BY t.friendID 
ORDER BY usersStatus.periodicDate ASC, usersStatus.setStatus ASC 
LIMIT 5

1 个答案:

答案 0 :(得分:0)

而不是写

AND friendID=u.userID

使用别名的实际值:

AND CASE WHEN f.userID=$session 
    THEN f.userID2 ELSE f.userID 
    END = u.userID