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