- ベストアンサー
SQLでグループ化して降順表示がうまくいきません
個人的にMysql、php環境でサイトを作っております。 そこで、素人質問で申し訳ありませんが、SQLでお伺いしたい点があります。 例えば下のようなテーブルがあります。 ▽果物テーブル 果物ID | 果物名 | 売れた日付 1 | リンゴ | 2008/11/1 2 | みかん | 2008/11/2 3 | みかん | 2008/11/3 4 | リンゴ | 2008/11/4 これを、 『最近売れた』果物順に、『グループ化』して並べ替えたいと思い、 下記のようなsqlを組みました。 $sql = "SELECT 果物名, FROM 果物テーブル GROUP BY 果物名 ORDER BY 売れた日付 DESC"; 意図としてはリンゴ、みかんの順に並べ替えたいのですが、 みかん、リンゴの順に表示されてしまいます。 想像では、グループ化したとき、古い日付の方が残ってしまい、 | リンゴ | 2008/11/1 | みかん | 2008/11/2 この部分を対象にして日付を降順にしてしまうからだと思うのですが、 これをうまく解決する方法が分かりません。 MSアクセスなどですと先に二重にクエリをかけるなどすることで 「先に降順で並べ替えたクエリを出し、その後グループ化させる」 など処理が簡単なのですが、phpではどうするのかいまひとつ分からず・・・ 申し訳ありませんがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>『最近売れた』果物順 でしたら日付のMAXを拾ってみては? SELECT 果物名,MAX(売れた日付) AS 売れた日付 FROM 果物テーブル GROUP BY 果物名 ORDER BY 売れた日付 DESC
その他の回答 (1)
- koke29
- ベストアンサー率58% (114/196)
SELECTの売れた日を max(売れた日) as day で order by day DESC にすると最新日付のデータでソートできました $sql = " SELECT 果物名,max(売れた日) as day FROM 果物テーブル GROUP BY 果物名 ORDER BY day DESC "; as の後は任意なので適当に付けて下さい
お礼
ありがとうございます。 max、勉強になりました!
お礼
ありがとうございます。 解決しました。 このような出し方があるのですね。勉強になりました。