簡體   English   中英

帶有主查詢數據變量的MySQL子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM