[PHP-users 12999] Re: PostgreSQLでランダムに1行だけ抜き出す方法
H.Isimaru
php-users@php.gr.jp
Tue, 04 Feb 2003 19:24:06 +0900
石丸@アイエヌです。
On Tue, 04 Feb 2003 19:05:01 +0900
titi@beefarm.jp <titi@beefarm.jp> wrote:
> こんにちは、いつもお疲れ様です。kisumiです。
>
> PostgreSQL7.2.3とPHP4.3にて表題の通り「PostgreSQLでランダムに1行だけ抜き
> 出す方法」を模索しているのですが、上手く辿り着けません。
>
> SQL系のMLに行けと言われてしまいそうですが、よろしくお願い致します。
>
> それぞれの行には通し番号をつけていますので、これを利用して抽出しようとし
> ています。
>
>
> //私はまずPHPで
> //1桁の整数をランダムに生成
>
> $i = rand(0,9);
>
>
> //次にPostgreSQLにて通し番号項目「_no_」を
> //先ほどの1桁乱数「$i」を用いて下一桁の物を対象に抽出
>
> select _no_ * from _table_name_ where _no_ like '%$i'
>
>
>
> このように、いきなり全体から抽出する事をさけ、比率でいうところの1/10に絞
> り込んでいます。例えば下一桁が「5」のものだけを抽出する事というような事
> が出来ます。
>
> そしてここからが問題なのですが、いったいどうして良いのか困っています。
>
> 最終的に「ランダムに1行」を抜き出す事を目的としていますので、PHPでいう
> ところの
>
> shuffle();
>
> なんかを使えると理想的なのですが。。。一定の規則性が生じては困りますので。
単純にランダムで1行でしたら、
select * from tablename where a=1 order by random() limit 1;
例えばこんな感じでどうでしょうか?
――――――――――――――――――――――――――――――――――――
石丸泰達 --> info@isimaru.net
---------------------------------------
アイエヌ(個人事業)
[主業務] CGI/PHPスクリプト・MIDIデータ作成代行
------------>>>>> http://www.isimaru.net/ <<<<<-------------------------