• ベストアンサー
  • 困ってます

2個のカラムに対して、ORDER BYをする方法

タイトルの通りなのですが picture_idとgrp_idは連番になっているのですが どちらか片方に対して、ORDER BYを行った場合 もう一方の連番が崩れてしまいます。 FROM区で、2つのカラムに対して ORDER BY ASC をする方法はあるのでしょうか? SELECT p.picture_id, p.grp_id, FROM hogehoge_info AS p WHERE ORDER BY p.picture_idASC ORDER BY p.grp_idASC 知っている方、いらっしゃいましたら ご教授お願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数162
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • Nigun
  • ベストアンサー率22% (200/893)

SELECT p.picture_id, p.grp_id, FROM hogehoge_info AS p WHERE ORDER BY p.picture_id ASC, p.grp_id ASC でいけるはずです。 この場合のソートはpicture_idでソートをした後、同じpicture_idの値に対し、grp_idをソートします。 どんなテーブルでどのようにしたいのかがはっきり分かればきちんと掛けるのですが・・・

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答ありがとうございます。 教えていただいたのを参考に試行錯誤をしていましたら 下記のSELECT文で取得できました。 WHERE句が必要なかったようです。 SELECT p.picture_id, p.grp_id FROM hogehoge_info AS p ORDER BY p.picture_id ASC , p.grp_id ASC

関連するQ&A

  • order by rank descでの並び替え。

    PHPからSQLITEのデータを並び替えて出力したいと思っています。 ~ $ord = $_REQUEST["ord"]; ~ if ($ord == 1) { $sql .= " order by rank desc"; // 並び順(人気) } else if ($ord == 2) { $sql .= " order by rank"; // 並び順(人気)逆順 } else { $sql .= " order by info.reg_date desc"; // 新人 } REQUESTによってrank順に並べ替えたいのですが、 SQLite Error select info.info_id as info_id,i1.value as info1 from info left join info_item i1 on info.info_id=i1.info_id where info.open=1 and i1.kind='info1' order by rank といったエラーがでてしまい行き詰っています。 原因のわかる方はいますでしょうか?

    • ベストアンサー
    • PHP
  • UNION / UNION ALL 時のORDER BY について

    初めて質問させていただきます。 表A(以下,TBL_A) と 表B(以下,TBL_B)があり,表名が 異なるだけでカラムの項目数,データ型は一致していてそれぞれ [TBL_A] SELECT * FROM TBL_A ORDER BY 1, 2 [TBL_B] SELECT * FROM TBL_B ORDER BY 2, 1 を UNION / UNION ALL したいのですが,上記のように ORDER BY が異なっている場合にはどのようにすれば いいのでしょうか? 苦戦中の成果物としてはそれぞれに固有の区分カラムを設け, その区分で判断し DECODE で ORDER BY しようとしたのですが 「"右カッコがありません"」と出て行き詰っています。 SELECT 区分, ○○, □□ FROM TBL_A WHERE ○○ = ??? UNION ALL (SELECT 区分, ○○, □□ FROM TBL_B) ORDER BY 区分, DECODE(区分,A,(1,2),B,(2,1)) 宜しくお願いします。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功

  • where order by

    where order by についてお教え下さい。 データの参照で strSQL = "select * from DATA Where TYPE_NO=" & TYPE_NO で、それぞれのタイプは表示できるのですが、 order byで降順表示したいのですが、組み合わせ方が分かりません。 ご教授下さい。

  • ORDER BY句の指定

    MySQL 4.0.26 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2273403 の続きになります。 ORDER BY句をつけて、人口密度でソートしたいときは、 SELECT 人口,面積,人口/面積 AS 密度 FROM MYTABLE WHERE 人口/面積 >20 ORDER BY ??? この???には、人口/面積が正解でしょうか?

    • ベストアンサー
    • MySQL
  • GROUP BY/ORDER BYの併用で期待するORDERが得られま

    GROUP BY/ORDER BYの併用で期待するORDERが得られません。 データベース初心者です。よろしくお願いいたします。 table id group_id name 1 1 冷蔵庫1 2 2 カメラ1 3 2 カメラ2 4 2 カメラ3 5 3 テレビ1 のようなテーブルを、group_idでグループ化し、idの大きい順に並べた以下のようなデータ id group_id name 5 3 テレビ1 4 2 カメラ3 1 1 冷蔵庫1 を取得しようとして悩んでおります。 SELECT MAX(id) AS max_id, id, group_id, name FROM table GROUP BY group_id ORDER BY max_id DESC というクエリですと max_id id group_id name 5 5 3 テレビ1 4 x 2 y 1 1 1 冷蔵庫1 という結果が得られますが、xとyところが、期待するx=4、y=カメラ3とならないケースがあります。 いくつかのテーブルで試しましたが、期待する結果になるものとならないものがありました。 例えばこれを自己結合することも考えたのですが、WHERE句にASで命名した「max_id」が含まれると「max_idが不明」というエラーが出ます。 MySQLのバージョンは4.0.xでして、サブクエリーが使えません。 このような状況で、何か方法がございましたらご教授のほどお願い申し上げます。 「期待する結果がクエリ1回で得られない」ということを知れるだけでも構いません。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • order by asc,desc混合index

    order by で asc ,desc混合する場合indexが使用できないと思いますが、 たとえば、col1,col2,col3があったとして order by col1 asc, col2 desc, col3 asc ➡ order by col1 asc ,99999999 - col2 asc , col3 asc などのように、 col2を、カラムが取りうる最大値から引いてやることでascに置き換えても indexはかからないでしょうか?

    • ベストアンサー
    • MySQL
  • 複雑なorder by

    例えば、テーブルが以下 <<T_BOARD(掲示板テーブル)>> ・id(スレッドID) ・parent_id(親スレッドID) ・created(作成日) データが以下(親スレッドはparent_id = 0) (id,parent_id,created) 1,0,2011/5/10 2,1,2011/4/11 3.0.2011/1/13 4,3,2011/5/20 5,0,2011/6/23 のようにあるとしたら、 スレッドを親スレッドごとに取得し、作成日の降順に取得したいです。 (id,parent_id,created) 5,0 (親スレッド自身が最新) 3,0(id2が2011/5/20) 1,0(id4が2011/4/11) 現在は select buid_id,created from T_ROOM where parent_id = 0 order by created; これだと、親スレッドの作成日降順にしかとれないので、 5,0 2011/6/23 1,0,2011/5/10 3.0.2011/1/13 となってしまいます。

    • ベストアンサー
    • MySQL
  • GROUPBY ORDER BY

    idの大きい順から並べたいのですがうまくいきません 調べて サブクエリなどを使い実行しましたがうまくいきませんでした ご教授お願いいたします ソース $sql='SELECT memberid,mailid,max(name),max(day) FROM messageall WHERE mailid=? GROUP BY memberid ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset; サブクエリでも試しましたが正直 ソースがめちゃくちゃでデータが表示されませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • order byで並び変えし最大値の項目の抽出方法ついて

    すみません。 order byで並び変えし最大値の項目のみ一意で抽出したいのですが 、 SELECT * from ta order by no,date1,date2; no | date1 | date2 ----+-------+------- 11 | 2008 | 0501 11 | 2008 | 0502 11 | 2008 | 0502 11 | 2008 | 0503 12 | 2008 | 0501 12 | 2008 | 0502 12 | 2008 | 0503 13 | 2008 | 0501 13 | 2008 | 0502 13 | 2008 | 0503 14 | 2008 | 0501 とあった場合、 no,date1,date2のorder by順番で並び変えし 11 | 2008 | 0503 12 | 2008 | 0503 13 | 2008 | 0503 14 | 2008 | 0501 とno項目に対し一つずつだけ出力したい場合どのようにしたらよいのでしょうか? LIMITとoffsetだと1項目分しか出力されず困っております。 SELECT * from ta where no in (select no from ta group by no limit 1 offset 0) order by no,date1 desc,date2 desc limit 1; 宜しくお願い致します。