[英]MySQL Subquery with main query data variable
好的,這里需要一個MySQL大師。 我正在嘗試編寫一個查詢,當有人對您之前評論過的項目發表評論時,該查詢將作為通知系統。 'drinkComment'表非常簡單:
commentID, userID, drinkID, datetime, comment
我寫了一個查詢,它將獲得我之前評論過的所有關於飲料的評論(這不是我的評論),但它仍會顯示我評論之前發生的評論。 這與我認為可行的一樣接近,但事實並非如此。 請幫忙!
select @drinkID:=drinkComments.drinkID, commentID, drinkID, userID, comment, datetime
FROM drinkComments
WHERE `drinkID` IN
( select distinct drinkID from drinkComments where drinkComments.userID = 1)
AND drinkComments.dateTime > (
/*This gets the last date user commented on the main query's drinkID*/
select datetime FROM drinkComments WHERE drinkComments.userID = 1 AND drinkComments.drinkID = @drinkID ORDER BY datetime DESC LIMIT 1
)
ORDER BY datetime DESC
為什么不從用戶的預先查詢和他們提供評論的所有飲料以及截止時間開始(不知道每個人對於任何給定的飲料是否有多個評論)。 然后,在您的日期/時間評論之后找到所有其他人的評論......
這個查詢實際上應該更快,因為它只是以一個用戶的飲料評論作為基礎開始,然后回到評論表中那些與飲料ID和截止時間相匹配的人。
SELECT STRAIGHT_JOIN
dc.*
from
( select
drinkID,
max( datetime ) UserID_DrinkCommentTime
FROM
drinkComments
WHERE
userID = 1
group by
drinkID ) PreQuery
join DrinkComments dc
on PreQuery.DrinkID = dc.DrinkID
and dc.datetime > PreQuery.UserID_DrinkCommentTime
order by
dc.DateTime desc
我認為您需要通過drinkID將最內層查詢與中間查詢相關聯。
select @drinkID:=drinkComments.drinkID, commentID, drinkID, userID, comment, datetime
FROM drinkComments
WHERE `drinkID` IN
( select distinct drinkID from drinkComments AS a where drinkComments.userID = 1)
AND drinkComments.dateTime > (
/*This gets the last date user commented on the main query's drinkID*/
select datetime FROM drinkComments WHERE drinkComments.userID = 1 AND drinkComments.drinkID = a.drinkID ORDER BY datetime DESC LIMIT 1
)
ORDER BY datetime DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.