У меня есть база данных для покупки билетов, и я хочу собрать все заказы, соответствующие определенным критериям, а затем также получить общее количество билетов для каждого заказа, подсчитав строки в таблице «orders_tickets», которые соответствуют идентификатору заказа. Если я сделаю SQL простым вызовом, этот SQL работает:
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 Б:
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 A в 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, но это чистое предположение.
Любая помощь приветствуется!