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

このQ&Aのポイント
  • 2つのカラムに対して、ORDER BY ASCをする方法はあるのでしょうか?
  • picture_idとgrp_idは連番になっているが、どちらか片方に対してORDER BYを行うともう一方の連番が崩れてしまいます。
  • 知っている方、いらっしゃいましたらご教授お願い致します。
回答を見る
  • ベストアンサー

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_id ASC ORDER BY p.grp_id ASC 知っている方、いらっしゃいましたら ご教授お願い致します。

  • MySQL
  • 回答数1
  • ありがとう数0

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

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

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をソートします。 どんなテーブルでどのようにしたいのかがはっきり分かればきちんと掛けるのですが・・・

fox_color
質問者

補足

ご回答ありがとうございます。 教えていただいたのを参考に試行錯誤をしていましたら 下記の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
  • where order by

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

  • 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 " ⇒成功

  • 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)) 宜しくお願いします。

  • 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
  • selectで抽出したデータの特定カラムを空に

    selectで抽出したデータの特定カラムのデータを空にしたいのですが、どのような方法がありますでしょうか。 以下のようなofficeテーブルがありまして、データは1万件あったとします。 id name place  1 浅谷 大阪 2 亀山 東京 3 武本 名古屋 placeカラムに東京を含むidが5000未満のデータを抽出し、そのデータのplaceカラムをすべて空に(削除)したいと思っています。 SELECT * FROM office WHERE place like '%東京%' and id < 5000 order by id asc; 上記のselect構文で希望データを抽出することはできたのですが、その抽出したデータのplaceカラムを空に(データを削除)する方法が分かりません。 アドバイス頂けると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 同一のカラム値をもつもの同士の中での連番

    こんにちは。 タイトルが上手くまとまっておらず、すみません。 以下のようなことを実現したいと思っております。 カラムc1(INT型)とカラムc2(INT型)をもつテーブルt1があるとします。 「INSERT INTO t1(c1) VALUES(1);」などと実行した場合、自動的にカラムc2が以下のように同一のカラムc1の値同士の中で連番されていくようにするテーブル定義はできないでしょうか。 ↓「SELECT c1, c2 FROM t1 ORDER BY 1 ASC, 2 ASC;」を実行した様子 1,1 1,2 2,1 3,1 3,2 ※ フォントの違いによる形崩れは免れないと思い、CSVのようにカラムの区切りをカンマで、レコードの区切りを改行で表現しています。 言うまでもなく、c1とc2の組は必然的にユニークになります。 ご教授、お願いします。

  • 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 での変数使用について。

    order by での変数使用について。 PHPのsql文でDBからデータを抽出する際にorder byで特定のデータに対して昇順、降順でデータを抽出したいのですが、ここで変数を使うとorder byが上手く機能しません。 変数でなく、直接カラム名を記入すれば動くのですが・・・。 一つ疑問に思ったことはorder byで変数が使えるかというところです。 where等の条件検索では問題なく使えるので使えないということはないのかなぁと思って 試行錯誤していましたが、どうにもこうにも上手くいきません。 また変数にした理由ですが、今回情報を検索する機能を作成しています。 データの数が多いため、次のページなど何ページかに分けて表示しようと思っています。 そのため特定の値(検索条件)をセッションに保存し、次のページなどに移動しても値を保持して 同じ条件で続きからデータを抽出したいのです。 sql文は $sql = 'SELECT * FROM `apartment` left join `member` on a_member = m_id left join `district` on a_district = d_id left join `room` on a_room = r_id WHERE `a_flg` = "0" AND `a_district` = "'.$_SESSION["district"].'" order by "'.$_SESSION["condition"].'"'; このようになっています。 セッションに値は入っていて、出力するとちゃんとカラム名(検索条件)が表示されます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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; 宜しくお願い致します。