[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/ <<<<<-------------------------