- 締切済み
MYSQLであるレコードを取得したいのですが
MYSQL5.0.33を使用しています。 今「ID(primary key)」「name」の二つのカラムのテーブルがあり、そのレコードの中から2の倍数と3の倍数のレコードをそれぞれ取得したいのです。 しかし、レコードが削除される可能性があり、なるべく均等に取得することができません。 ================= (例) 1 佐藤 2 鈴木 3 (削除されたレコード) 4 田中 5 小林 6 (削除されたレコード) 7 阿部 8 吉田 9 (削除されたレコード) ================= 上記のような状態ですと、3の倍数のレコードは一つも取得できません。 素人の感覚的な話になってしまうのですが、 ================= (例) 1 佐藤 2 鈴木 3 田中 4 小林 5 阿部 6 吉田 ================= このような感じにして、 「2の倍数は『鈴木』『小林』『吉田』」 「3の倍数は『田中』『吉田』」 で取得はできないものかと思い質問させて頂きました。 できなければ、何か方法や苦肉の策等ありましたらご教授頂けませんでしょうか。 どうか宜しくお願い致します!
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yamada404
- ベストアンサー率56% (9/16)
No.1です。すいません、フィールド名が違ってました。 no → ID に読み替えてください。 質問の意図に沿っているか分かりませんが。。
- chukenkenkou
- ベストアンサー率43% (833/1926)
削除で空いた番号を、詰め直したいといってますか? 詰め直した結果、2の倍数や3の倍数の行の値が、変わってもいいのですか? そういうことであれば、そもそも2の倍数とか3の倍数というのは意味がなく、ランダムに取り出せればいいということなのでしょうか? ランダムに取り出せればいいということなら、order byでrand()関数を指定する方法があります。さらに、limit句を指定することで、取得件数も指定できます。 select * from t1 order by rand() [limit m,n] もし、2の倍数、3の倍数に何らかの意味があるということなら、補足説明を追記願います。
- yamada404
- ベストアンサー率56% (9/16)
これでどうですか (※3の倍数の場合) select * from table a where mod( (select count(*) from table b where a.no >= b.no) , 3) = 0;
お礼
ご教授有難うございます。 先週PCが壊れてしまい、その復旧に時間をとられ、せっかく教えていただいたSQL分を試すことがまだ出来ておりません。 早く試してお礼が言いたかったのですが、復旧にもう少し時間がかかることを踏まえ、取り急ぎお礼まで申し上げます。
お礼
ご教授有難うございます。 先週PCが壊れてしまい、その復旧に時間をとられ、せっかく教えていただいたSQL分を試すことがまだ出来ておりません。 早く試してお礼が言いたかったのですが、復旧にもう少し時間がかかることを踏まえ、取り急ぎお礼まで申し上げます。 尚、2の倍数、3の倍数には特に意味はありません。 実際はもう少し複雑なのですが、これさえわかれば何とかなる!と思いまして・・かえって紛らわしくしてしまい申し訳ありません。 「削除で空いた番号を、詰め直したい」というのが私の求めいていることで、詰め直した結果、2の倍数や3の倍数の行の値が変わっても問題はありません。