こんばんは。
現在、PerlからMysqlに接続してデータを昇順?降順に並べようと思っております。
しかし、降順に並べる場合、うまく動きません。
詳細を以下に明記しますので、どなたか宜しくお願いします。
テーブル名:test
テーブル内のデータ:100個
まず、昇順の場合
少し省略しますが、まず接続します。
$dbh = DBI->connect($dsn,$user,$password);
$sth = $dbh->prepare("SELECT * From test Order by no limit 5,2");
$sth->execute;
$sth->finish;
$dbh->disconnect;
これで、no5から二つ(つまり、no5とno6のみ)が抽出されると思います。
降順の場合
$dbh = DBI->connect($dsn,$user,$password);
$sth = $dbh->prepare("SELECT * From test Order by no desc limit 5,2");
$sth->execute;
$sth->finish;
$dbh->disconnect;
こうすると、no6,no5という順に抽出されます。ちなみに、limit 5,2をlimit 5,3とすると、no6,no5,no4と抽出されます。なぜここでlimit 5,2の際にno5,no4でlimit 5,3の際にno5,no4,no3という順に抽出されないのか分かりません。
私がしたいのは、noを降順(no5,no4,no3・・・)という順に表示させたいのです。ただ、降順に表示させるのではなく、例えば上記でlimitで指定したように、あるnoから3つとかしたいのです。
質問が長くなり分かりにくいかも知れないのですが、どなたか力を貸していただけないでしょうか。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
> limitで指定したように、あるnoから3つとかしたいのです
おそらくLIMIT自体を勘違いなさっているのでは。
LIMITの1つ目の引数はオフセット、つまり先頭から数えた位置です。降順に並べておいて、先頭から数えて5行目から2行だけを取り出せ、という意味になります。「noが5のレコード」という意味ではありません。
マニュアルをご確認ください(参考URL)。
しかしレコードが100個あるとのことですが、ちょっと矛盾しますね…(10個なのでは?)。この点ももう一度確認してみては。
「noが5のレコードから、降順に2つを取り出したい」ということなら、
WHERE no<=5 ORDER BY no DESC LIMIT 5,2
という感じでしょうか。
参考URL:http://www.mysql.gr.jp/
この回答への補足
tasekiさん、詳しく説明していただいてありがとうございます。
私がlimitについて勘違いしていたようです・・・。
no5と5行目というのが、ごちゃごちゃになってちゃんと区別出来てなかった為、難しくなっていたのかも・・・。
>「noが5のレコードから、降順に2つを取り出したい」ということなら、
>WHERE no<=5 ORDER BY no DESC LIMIT 5,2
上記の件ですが、「no5のレコードから降順に2つ」なので、
WHERE no<=5 ORDER BY no DESC LIMIT 2
では違うのでしょうか。これも私の勘違いかな・・・。
No.3
- 回答日時:
> WHERE no<=5 ORDER BY no DESC LIMIT 2
> では違うのでしょうか。これも私の勘違いかな・・・。
いいえ、この部分は、今度は私の勘違いです…、大変失礼しました。
よく確認せずにコピペしてしまいました。混乱させてしまい申し訳ありません。
それならよかったです。自信がなかったので・・・。
教えてもらった事と参考URLを見させていただき、少しずつですがうまく使えるようになってきました。
ありがとうございました。
特に今回は私のlimitの解釈が間違ってて思った通りの結果が出なかったように思います。
この度は、詳しく教えていただきほんとにありがとうございました。
No.1
- 回答日時:
>>こうすると、no6,no5という順に抽出されます。
ちなみに、limit 5,2をlimit 5,3とすると、no6,no5,no4と抽出されます。なぜここでlimit 5,2の際にno5,no4でlimit 5,3の際にno5,no4,no3という順に抽出されないのか分かりません。なんか、上記の部分だけみると、正常動作のようにも思えますけど?
>>私がしたいのは、noを降順(no5,no4,no3・・・)という順に表示させたいのです。
という期待が、もしかすると「1+1=3を期待しているのに、1+1=2になってしまうんです」
というような期待する答え自体が間違っているのでは?
データが100個あるとのことですが、もう少し件数を減らして、期待する結果と得られた結果を比較してみることをお勧めします。こういう場合、人間よりもコンピュータのほうが正しいでしょうからね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- Access(アクセス) MAXで0が出力される 1 2022/03/31 21:43
- Visual Basic(VBA) マクロで設定時刻の入力がわかりません 2 2022/03/29 02:24
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- 英語 不定代名詞"no..."の否定語noの及び範囲について 4 2022/08/04 11:11
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- Excel(エクセル) マクロ 2行ごとの並び替えについて 4 2022/12/14 12:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日齢計算プログラム
-
2つの日付・時間の差分を求め...
-
当日の日付をプルダウンメニュ...
-
大至急お願いします。出力で悩み。
-
C言語を用いて、2つのファイル...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
文字の横にプルダウンを表示さ...
-
VBAでPDFのコピーとリネームを...
-
VBA他のブックから値のみ貼付す...
-
セレクトメニューで2つの項目...
-
実行時エラー 3020の対策
-
<SELECT>タグの折り返し
-
構造体の各データの表示につい...
-
プルダウンメニューで中央表示
-
複数列を持ったリストボックス...
-
selectタグ内の特定のoptionの...
-
VB6で、長い時間かかる処理...
-
pythonで演算子を変数に代入す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付の差分の求め方(日、分)
-
1桁の日付に0を付ける
-
Perlでsprintf("%02d",$month)...
-
2つの日付・時間の差分を求め...
-
日齢計算プログラム
-
a shower.
-
Perlの日付の比較に関して
-
前日の日付取得するには?
-
サマータイムの判定について
-
pythonのプログラミングについ...
-
時間の計算について
-
VBAでオーバーフローが出て困っ...
-
当日の日付をプルダウンメニュ...
-
「型が一致しません」のエラー...
-
perlでcheckboxがうまく整理で...
-
Schemeのプログラミング うる...
-
perl ハノイの塔の解に順番付け...
-
Perlでテキストファイルの読み込み
-
このソースがコンパイルエラー...
-
PerlからMysqlに接続してデータ...
おすすめ情報