Description:
The following code produces the error:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 25' at line 34
SET @UID = 10;
SELECT * FROM (
SELECT VisitsDetails.Object AS MyShow, Visits.Duration
FROM VisitsDetails
INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID
INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session
INNER JOIN Shows ON Shows.ID=VisitsDetails.Object
WHERE SiteSection='show' AND
VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND
Shows.Archive=0
UNION
SELECT Seances.ShowID AS MyShow, Visits.Duration
FROM VisitsDetails
INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID
INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session
INNER JOIN Shows ON Shows.ID=VisitsDetails.Object
INNER JOIN Seances ON VisitsDetails.Object=Seances.ID
WHERE SiteSection='seance' AND
VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND
Shows.Archive=0
) t
WHERE
# есть непроданные билеты:
EXISTS(
SELECT * FROM Seances INNER JOIN NewSeats ON NewSeats.SeanceID=Seances.ID
WHERE Seances.ShowID=MyShow AND Seances.Active=1 AND
NewSeats.Owner=0 AND NewSeats.Status=2 AND
# но данный юзер их не покупал:
NOT EXISTS(SELECT * FROM PreOrders INNER JOIN Orders ON Orders.ID=PreOrders.OrderID WHERE VisitorID=@UID AND PreOrders.SeanceID=Seances.ID)
)
ORDER BY Duration DESC
LIMIT 5
If I remove the comments, there is no error:
SET @UID = 10;
SELECT * FROM (
SELECT VisitsDetails.Object AS MyShow, Visits.Duration
FROM VisitsDetails
INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID
INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session
INNER JOIN Shows ON Shows.ID=VisitsDetails.Object
WHERE SiteSection='show' AND
VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND
Shows.Archive=0
UNION
SELECT Seances.ShowID AS MyShow, Visits.Duration
FROM VisitsDetails
INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID
INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session
INNER JOIN Shows ON Shows.ID=VisitsDetails.Object
INNER JOIN Seances ON VisitsDetails.Object=Seances.ID
WHERE SiteSection='seance' AND
VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND
Shows.Archive=0
) t
WHERE
EXISTS(
SELECT * FROM Seances INNER JOIN NewSeats ON NewSeats.SeanceID=Seances.ID
WHERE Seances.ShowID=MyShow AND Seances.Active=1 AND
NewSeats.Owner=0 AND NewSeats.Status=2 AND
NOT EXISTS(SELECT * FROM PreOrders INNER JOIN Orders ON Orders.ID=PreOrders.OrderID WHERE VisitorID=@UID AND PreOrders.SeanceID=Seances.ID)
)
ORDER BY Duration DESC
LIMIT 5
Sorry, I cannot provide our database structure, it's private.
How to repeat:
SET @UID = 10;
SELECT * FROM (
SELECT VisitsDetails.Object AS MyShow, Visits.Duration
FROM VisitsDetails
INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID
INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session
INNER JOIN Shows ON Shows.ID=VisitsDetails.Object
WHERE SiteSection='show' AND
VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND
Shows.Archive=0
UNION
SELECT Seances.ShowID AS MyShow, Visits.Duration
FROM VisitsDetails
INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID
INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session
INNER JOIN Shows ON Shows.ID=VisitsDetails.Object
INNER JOIN Seances ON VisitsDetails.Object=Seances.ID
WHERE SiteSection='seance' AND
VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND
Shows.Archive=0
) t
WHERE
# есть непроданные билеты:
EXISTS(
SELECT * FROM Seances INNER JOIN NewSeats ON NewSeats.SeanceID=Seances.ID
WHERE Seances.ShowID=MyShow AND Seances.Active=1 AND
NewSeats.Owner=0 AND NewSeats.Status=2 AND
# но данный юзер их не покупал:
NOT EXISTS(SELECT * FROM PreOrders INNER JOIN Orders ON Orders.ID=PreOrders.OrderID WHERE VisitorID=@UID AND PreOrders.SeanceID=Seances.ID)
)
ORDER BY Duration DESC
LIMIT 5
Suggested fix:
Parse comments in a right way
Description: The following code produces the error: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 25' at line 34 SET @UID = 10; SELECT * FROM ( SELECT VisitsDetails.Object AS MyShow, Visits.Duration FROM VisitsDetails INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session INNER JOIN Shows ON Shows.ID=VisitsDetails.Object WHERE SiteSection='show' AND VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND Shows.Archive=0 UNION SELECT Seances.ShowID AS MyShow, Visits.Duration FROM VisitsDetails INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session INNER JOIN Shows ON Shows.ID=VisitsDetails.Object INNER JOIN Seances ON VisitsDetails.Object=Seances.ID WHERE SiteSection='seance' AND VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND Shows.Archive=0 ) t WHERE # есть непроданные билеты: EXISTS( SELECT * FROM Seances INNER JOIN NewSeats ON NewSeats.SeanceID=Seances.ID WHERE Seances.ShowID=MyShow AND Seances.Active=1 AND NewSeats.Owner=0 AND NewSeats.Status=2 AND # но данный юзер их не покупал: NOT EXISTS(SELECT * FROM PreOrders INNER JOIN Orders ON Orders.ID=PreOrders.OrderID WHERE VisitorID=@UID AND PreOrders.SeanceID=Seances.ID) ) ORDER BY Duration DESC LIMIT 5 If I remove the comments, there is no error: SET @UID = 10; SELECT * FROM ( SELECT VisitsDetails.Object AS MyShow, Visits.Duration FROM VisitsDetails INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session INNER JOIN Shows ON Shows.ID=VisitsDetails.Object WHERE SiteSection='show' AND VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND Shows.Archive=0 UNION SELECT Seances.ShowID AS MyShow, Visits.Duration FROM VisitsDetails INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session INNER JOIN Shows ON Shows.ID=VisitsDetails.Object INNER JOIN Seances ON VisitsDetails.Object=Seances.ID WHERE SiteSection='seance' AND VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND Shows.Archive=0 ) t WHERE EXISTS( SELECT * FROM Seances INNER JOIN NewSeats ON NewSeats.SeanceID=Seances.ID WHERE Seances.ShowID=MyShow AND Seances.Active=1 AND NewSeats.Owner=0 AND NewSeats.Status=2 AND NOT EXISTS(SELECT * FROM PreOrders INNER JOIN Orders ON Orders.ID=PreOrders.OrderID WHERE VisitorID=@UID AND PreOrders.SeanceID=Seances.ID) ) ORDER BY Duration DESC LIMIT 5 Sorry, I cannot provide our database structure, it's private. How to repeat: SET @UID = 10; SELECT * FROM ( SELECT VisitsDetails.Object AS MyShow, Visits.Duration FROM VisitsDetails INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session INNER JOIN Shows ON Shows.ID=VisitsDetails.Object WHERE SiteSection='show' AND VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND Shows.Archive=0 UNION SELECT Seances.ShowID AS MyShow, Visits.Duration FROM VisitsDetails INNER JOIN Visits ON Visits.ID=VisitsDetails.VisitID INNER JOIN VisitsSessions ON VisitsSessions.ID=Visits.Session INNER JOIN Shows ON Shows.ID=VisitsDetails.Object INNER JOIN Seances ON VisitsDetails.Object=Seances.ID WHERE SiteSection='seance' AND VisitsSessions.User=@UID AND Visits.Duration IS NOT NULL AND Shows.Archive=0 ) t WHERE # есть непроданные билеты: EXISTS( SELECT * FROM Seances INNER JOIN NewSeats ON NewSeats.SeanceID=Seances.ID WHERE Seances.ShowID=MyShow AND Seances.Active=1 AND NewSeats.Owner=0 AND NewSeats.Status=2 AND # но данный юзер их не покупал: NOT EXISTS(SELECT * FROM PreOrders INNER JOIN Orders ON Orders.ID=PreOrders.OrderID WHERE VisitorID=@UID AND PreOrders.SeanceID=Seances.ID) ) ORDER BY Duration DESC LIMIT 5 Suggested fix: Parse comments in a right way