dポイントプレゼントキャンペーン実施中!

こんばんは。
現在、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つとかしたいのです。

質問が長くなり分かりにくいかも知れないのですが、どなたか力を貸していただけないでしょうか。
宜しくお願いします。

A 回答 (3件)

> 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
では違うのでしょうか。これも私の勘違いかな・・・。

補足日時:2006/09/16 12:20
    • good
    • 0

> WHERE no<=5 ORDER BY no DESC LIMIT 2


> では違うのでしょうか。これも私の勘違いかな・・・。

いいえ、この部分は、今度は私の勘違いです…、大変失礼しました。
よく確認せずにコピペしてしまいました。混乱させてしまい申し訳ありません。
    • good
    • 0
この回答へのお礼

それならよかったです。自信がなかったので・・・。

教えてもらった事と参考URLを見させていただき、少しずつですがうまく使えるようになってきました。
ありがとうございました。
特に今回は私のlimitの解釈が間違ってて思った通りの結果が出なかったように思います。

この度は、詳しく教えていただきほんとにありがとうございました。

お礼日時:2006/09/17 17:33

>>こうすると、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個あるとのことですが、もう少し件数を減らして、期待する結果と得られた結果を比較してみることをお勧めします。こういう場合、人間よりもコンピュータのほうが正しいでしょうからね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!