我試圖從表中選擇一個朋友列表,它工作正常。但是現在我試圖通過另一個表格來排序結果,這是用戶在線狀態/最近的在線活動。SQL查詢,從table1中選擇order by table2 rows
我想使用的查詢是(錯誤是:未知列「friendID」在「where子句」):
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
取決於我的腳本確定他是什麼,所以它可以是1
,2
或3
。 1
是Online
,2
是Away
和3
是Offline
。
所以就像我上面所說的那樣,在這個表中還沒有一行的用戶應該自動被賦予一個offline
狀態。
編輯
我有一個查詢工作,我想它,但是這是非常混亂的,並且必須是巨大的浪費資源的,因爲我有GROUP BY friendID,以便它返回用戶只有一次。 (因爲我的朋友數據庫保存每一行,所以如果一個人unfriends別人,它只是創建一個新的行,如果他們回到朋友等)
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
謝謝,但我試過這個,它給了我一個錯誤,你的SQL語法錯誤;請檢查與您的MySQL服務器版本對應的手冊,以便在第3行的'FROM friends f,usersStatus u WHERE(f.userID = 1或f.userID2 = 1')附近使用正確的語法 –
如果刪除AND friendID = u.userID從你的第一個查詢? – cha
它返回每一行,並且用戶多次返回。但是,我確實得到了一個查詢工作,因爲我想它,但它是一個巨大的混亂,並且不工作非常正確,除非我GROUP BY的朋友ID,我會在其他人的下面發佈我的問題。 –