Как я могу создать оператор GROUP BY SQL - PullRequest
0 голосов
/ 18 июня 2019

У меня есть таблица с несколькими заказами, при обновлении статуса заказа создаются новые записи, поэтому в 1 заказе может быть несколько записей из-за разного статуса.

У меня есть панель администратора, где администратор может видеть все заказы, но я не хочу отображать каждое обновление для каждой записи, потому что это может легко выйти из-под контроля. Поэтому я бы хотел иметь самую последнюю запись для каждого заказа. Поэтому, если у меня есть 7 записей для заказа № 100, я хочу показать самое последнее обновление для заказа № 100. Я хочу, чтобы каждый заказ был таким.

Я немного прочитал в Интернете и попытался узнать о MySQL Group. Поскольку я считаю, что это лучший способ достичь того, чего я хочу, но, похоже, я не могу заставить его работать, я продолжаю получать там сообщение, в котором говорится ошибка с моим оператором SQL

$query = '(SELECT * FROM orders 
           WHERE `order_status` != "Order Complete" 
           ORDER BY `order_update` DESC 
           GROUP BY `order_number`)'; 
$orderList = $conn->query($query);

Это ошибка, которую я получаю У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'GROUP BY order_number

Я должен был предоставить структуру моего столбца. Таким образом, у меня есть столбец идентификатора, столбец номера заказа, столбец состояния заказа и, наконец, столбец даты заказа. Таким образом, я могу определить наиболее актуальный статус, взяв дату заказа (которая установлена ​​как метка времени).

EDIT Я хочу добиться того, что я поставил в своем вопросе, но это внутри цикла. Я перебираю и отображаю все это внутри таблицы, так что может быть 100 разных заказов, что означает 100 разных номеров заказов, но я хочу отображать только последний статус каждого заказа, который я могу определить с помощью столбца Дата заказа. Также я использую PHP для построения / выполнения запроса

Ответы [ 3 ]

1 голос
/ 18 июня 2019

Прежде всего, как уже упоминалось в комментарии выше, у вас есть ответ на вашу проблему с ошибкой, GROUP BY всегда перед ORDER BY.

Во-вторых, нам нужно больше данных о ваших столбцах?может у вас есть время и дата заказа?Как вы определяете, какой заказ является последним?

Как насчет чего-то подобного

$query = '(SELECT DISTINCT id, order_number, order_status, MAX(order_date) 
           FROM orders 
           WHERE `order_status` != "Order Complete"  
           ORDER BY `order_update` DESC, MAX(order_date)'; 
$orderList = $conn->query($query);

Просто отредактируйте его в синтаксисе PHP, так как я не знаком с ним

0 голосов
/ 18 июня 2019

Я, очевидно, не знаю 100% того, что вы ищете, но вы, вероятно, могли бы достичь этого, даже не используя предложение GROUP BY.Обычно вы используете GROUP BY только тогда, когда используете агрегатные функции (COUNT, SUM и т. Д.). Это способ сказать «эй, я хочу подсчет, сумму и т. Д. Этих конкретных столбцов».

Ваш запрос, вероятно, будет примерно таким:

SELECT *
FROM orders
WHERE order_status != 'Order Complete' -- Consider revising, maybe just a boolean?
    AND order_number = 100
ORDER BY order_update DESC
LIMIT 1;

Ваш запрос может сильно отличаться в зависимости от вашей СУБД, имен столбцов и т. Д. Не стесняйтесь комментировать с дополнительной информацией, и я могу помочьВы больше:)

РЕДАКТИРОВАТЬ: Просто заметил, что вы указали MySQL в качестве вашей СУБД.Виноват.Этого запроса должно быть достаточно с незначительными изменениями.

0 голосов
/ 18 июня 2019
$query = '(SELECT * FROM orders 
           WHERE `order_status` != "Order Complete"           
           GROUP BY `order_number`
           HAVING `order_update`=MAX(`order_update`))';
...