1
我有一個購票數據庫,並希望收集符合特定條件的所有訂單,然後通過計算與ordersID匹配的'orders_tickets'表中的行數來獲取每個訂單具有的總票數。如果我讓SQL一個簡單的通話,這SQL工作:MYSQL與其他修飾符計數子表 - 請幫助!
SQL答:
SELECT o . * , COUNT(ot.OrderTicketID) AS numtix
FROM orders o
LEFT JOIN orders_tickets ot ON o.orderID = ot.orderID
GROUP BY o.orderID
LIMIT 0 , 30
而這個SQL工作過 - 這是原來的SQL調用了所有我想數據除了的numtix數據:
SQL B:
SELECT o.*,
IF(o.orderedbyID = '0', ob.fname, u.fname) AS obfname,
IF(o.orderedbyID = '0', ob.lname, u.lname) AS oblname
FROM orders o, perfs p, orders_orderedby ob, users u
WHERE p.eventID = '2'
AND p.perfID = o.perfID
AND ((UNIX_TIMESTAMP(p.perfdatetime) - UNIX_TIMESTAMP(NOW())) > 0)
AND ob.orderID = o.orderID
AND u.userID = o.orderedbyID
ORDER BY p.perfdatetime ASC
LIMIT 0, 30
但是當我嘗試SQL一個納入SQL B,我得到的錯誤:
SQL C:(不工作)
SELECT o.*, COUNT(ot.OrderTicketID) AS numtix,
IF(o.orderedbyID = '0', ob.fname, u.fname) AS obfname,
IF(o.orderedbyID = '0', ob.lname, u.lname) AS oblname
FROM orders o, perfs p, orders_orderedby ob, users u
LEFT JOIN orders_tickets ot ON o.orderID = ot.orderID
WHERE p.eventID = '2'
AND p.perfID = o.perfID
AND ((UNIX_TIMESTAMP(p.perfdatetime) - UNIX_TIMESTAMP(NOW())) > 0)
AND ob.orderID = o.orderID
AND u.userID = o.orderedbyID
ORDER BY p.perfdatetime ASC
GROUP BY o.orderID
LIMIT 0, 30
這是我的錯誤:
#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 'GROUP BY o.orderID LIMIT 0, 30' at line 12
我的直覺是, 「GROUP BY」 需要應用到LEFT JOIN和不整個SQL,但這是一個純粹的猜測。
任何幫助最受讚賞!
感謝您的答覆。但是當我做出這種改變時,我得到這個錯誤:#1054 - 'on子句' – 2010-01-22 17:10:19
'@Mark S'中的未知列'o.orderID':這是因爲你混合了顯式和隱式連接。等一下,我會更新答案。 – Quassnoi 2010-01-22 17:27:29
哇 - 完美的作品。非常感謝! – 2010-01-22 17:41:12