У меня есть база данных по покупке билетов, и я хочу собрать все заказы, которые соответствуют определенным критериям, а затем также собрать общее количество билетов, которое есть у каждого заказа, путем подсчета строк в таблице orders_tickets, которые соответствуют orderID. Если я сделаю SQL простой вызов, этот SQL работает:
SQL A:
ВЫБЕРИТЕ o. *, COUNT (ot.OrderTicketID) AS numtix
ОТ заказов о
СЛЕДУЮЩИЙ ПРИСОЕДИНЯЙТЕСЬ к orders_tickets orders o.orderID = ot.orderID
GROUP BY o.orderID
LIMIT 0, 30
И этот SQL тоже работает - это оригинальный вызов SQL со всеми данными, которые мне нужны , за исключением данных numtix:
SQL B:
ВЫБЕРИТЕ 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, пользователи u
ГДЕ 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
ЗАКАЗАТЬ по номеру p.perfdatetime
LIMIT 0, 30
Но когда я пытаюсь включить SQL A в SQL B, я получаю ошибки:
SQL C: (не работает)
ВЫБРАТЬ 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, пользователи u
LEFT JOIN orders_tickets не включен o.orderID = ot.orderID
ГДЕ 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
ЗАКАЗАТЬ через p.perfdatetime ASC
GROUP BY o.orderID
LIMIT 0, 30
Это ошибка, которую я получаю:
# 1064 - у вас ошибка в синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL, для использования в поле «GROUP BY o.orderID LIMIT 0, 30» в строке 12.
Мой инстинкт заключается в том, что «GROUP BY» необходимо применять к левому соединению, а не ко всему SQL, но это чистое предположение.
Любая помощь наиболее ценится!