2011-08-05 11 views
0

誰かが私のテーブルから情報を選択するのを助けてくれるのだろうかと思っていましたが、オーダーIDに応じて結果をグループ化しました。私はこれがかなりシンプルだと確信していますが、私はコードを動作させるように見えることはできません。mysqlはすべてオーダーIDでグループを選択します

ここに私の試みです - のみ1件の結果を示している、代わりに6の:

  • 4受注コードと結果55542
  • 2受注コードと結果55543

SQL:

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

ご了承ください。

EDIT:

私はこの(または似たような)acheiveしたい

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] => 
     ) 

) 
+0

あなたが望むものは明確ではありません。すでにオーダーIDでグループ化していますが、達成しようとしているのは何ですか? – Shef

+0

作業しているソースデータのサンプルを投稿できますか? –

+0

結果をグループ化したらどうしますか?あなたはgroup byで集約関数を使用しなければなりません。 (私はこれを許してMySQLが嫌いです!) – Jacob

答えて

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

ただ、このようなあなたの項目を選択し、結果を反復処理とによって来るすべての新しい受注のための新しい配列を作成することにより、フロントエンドでのオブジェクト/配列の階層を作成します。

+0

うん、おそらくOPが本当に望んでいるもの。 – gbn

1

あなたはこのクエリに "*" を選択してはいけません。

「一部の列」でグループ化すると、 「some columns」またはsome_aggregate_function(他の列)のみを選択できます。

マッチBY

SELECT orderid, sum(ordersize), max(date) FROM #__users_orders WHERE userid = 22 GROUP BY orderid ORDER BY max(date) DESC 
1
SELECT orderid, COUNT(*) 
FROM #__users_orders 
WHERE userid = 22 
GROUP BY orderid 
ORDER BY date DESC 

通常は、あなたが(例えばCOUNT、SUM)の集計を使用する必要がありますし、GROUP - あなたは、各オーダーIDの集約ordersizeと最新の日付を取得したい場合は、あなたのような何かをするだろう。 SELECTの列はCOUNTまたはSUMには含まれません。

ではなく、はこの規則に従います。他のDBエンジンではエラーが発生します。

1

問合せは、多分あなたは結果に間違った方法

フィールド1 BYテーブルのグループから

SELECT *を抽出し、OKらしいです。

SELECTフィールド1、フィールド1 BYテーブル群からFIELD2より同じ行数を返す必要があります。

異なる数テーブルFROM

SELECT *より。

関連する問題