MySQL выбрать все, сгруппировать по orderid - PullRequest
0 голосов
/ 05 августа 2011

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

Вот моя попытка - которая показывает только 1 результат вместо 6:

  • 4 результатов с orderid 55542
  • 2 результатов с orderid 55543

SQL:

SELECT *
FROM #__users_orders
WHERE userid = 22 
GROUP BY orderid 
ORDER BY date DESC

Любая помощь будет оценена :)

EDIT:

Я бы хотел добиться этого (или чего-то подобного)

Array[55542]
(
    [0] => stdClass Object
        (
            [id] => 6
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:30:24
            [code] => 121021
            [title] => 7 STAR CHICKEN A/KING 71198 1.3KG
            [units] => 2
            [ctns] => 
        )

    [1] => stdClass Object
        (
            [id] => 1
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:06:12
            [code] => 302371
            [title] =>  ANCHOVY FILL 730GM
            [units] => 2
            [ctns] => 
        )

    [2] => stdClass Object
        (
            [id] => 6
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:30:24
            [code] => 121021
            [title] => 7 STAR CHICKEN A/KING 71198 1.3KG
            [units] => 2
            [ctns] => 
        )

    [3] => stdClass Object
        (
            [id] => 1
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:06:12
            [code] => 302371
            [title] =>  ANCHOVY FILL 730GM
            [units] => 2
            [ctns] => 
        )

)

Array[55543]
(
    [0] => stdClass Object
        (
            [id] => 6
            [userid] => 66
            [orderid] => 55543
            [date] => 2011-08-05 16:30:24
            [code] => 121021
            [title] => 7 STAR CHICKEN A/KING 71198 1.3KG
            [units] => 2
            [ctns] => 
        )

    [1] => stdClass Object
        (
            [id] => 1
            [userid] => 66
            [orderid] => 55543
            [date] => 2011-08-05 16:06:12
            [code] => 302371
            [title] =>  ANCHOVY FILL 730GM
            [units] => 2
            [ctns] => 
        )

)

Ответы [ 4 ]

3 голосов
/ 05 августа 2011
SELECT *
FROM #__users_orders
WHERE userid = 22 
ORDER BY orderid DESC

Просто выберите такие элементы, как этот, и создайте иерархию объектов / массивов во внешнем интерфейсе, перебирая результаты и создавая новый массив для каждого нового orderid, который приходит.

1 голос
/ 05 августа 2011

запрос выглядит нормально, может быть, вы извлекаете результаты неверным образом

SELECT * FROM таблицы GROUP BY field1;

должно возвращать то же количество строк, что и

SELECT field1, field2 ИЗ таблицы GROUP BY field1;

но номер отличается от

SELECT * FROM table;

1 голос
/ 05 августа 2011
SELECT orderid, COUNT(*)
FROM #__users_orders
WHERE userid = 22 
GROUP BY orderid 
ORDER BY date DESC

Как правило, вы должны использовать агрегат (например, COUNT, SUM) и соответствие GROUP BY.Таким образом, столбцы в SELECT, но не в COUNT или SUM, находятся в GROUP BY

Только MySQL позволяет , а не следовать этому правилу.Другие движки БД выдают ошибку.

1 голос
/ 05 августа 2011

Вы не должны выбирать «*» в этом запросе.

Когда вы группируете по "некоторым столбцам". Вы можете выбрать только «некоторые столбцы» или some_aggregate_function (другие столбцы).

например. Если вы хотите получить совокупный размер заказа и последнюю дату для каждого идентификатора заказа, вы должны сделать что-то вроде -

SELECT orderid, sum(ordersize), max(date) FROM #__users_orders WHERE userid = 22 GROUP BY orderid ORDER BY max(date) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...