[PHP-users 10014] 複数選択項目の効率の良い管理方法について

Osamu Shigematsu php-users@php.gr.jp
Thu, 12 Sep 2002 02:33:06 +0900


こんにちは。重松です。

非常に基本的な項目なので、恐縮ですが。。。

アンケートなどでよくある複数選択項目を
DB で効率良く管理する方法について、
アドバイスをいただければと思います。

例えば、

あなたのお持ちの周辺機器について教えて下さい。

	□ デジタルカメラ
	□ イメージスキャナ
	□ プリンタ

ような項目があったとして、どのように保持すれば、
例えば、悩みに、たるみかむくみを選んだ人、というような検索が、
高速に可能になるのでしょうか。

各項目は、現状個数が固定ですが、将来的に増えるかもしれません。

DB には、PostgreSQL を使う予定ですが、
いろいろな DB で動く方法が良いのですが。

とりあえず、パッと思い付くのは、ビット列型ですが、
PostgreSQL 完全攻略ガイド (シーラカンス本) によると、
7.1 からのサポートとなっているので、
普通に CHAR(n) とするのか、とも思ったりもしていますし、
各質問項目ごとに CHAR などで保持した方がいいのかな、
とも思ったりもしているのですが。

ビット配列の場合には、AND 検索は楽だと思われるのですが、
OR 検索がかったるい気がします。(INTERGER で論理演算をした場合も)

それぞれを別にした場合には、SQL 文を作る時に、
各項目の名前を連番なんかにすれば、

	$SQL = array();
	foreach($items as $item)
		$SQL[] = "所有機器$item = '1'";
	$SQL = join($SQL, $condition ? " AND " : " OR ");
	$SQL = "SELECT * FROM 周辺機器アンケート表 WHERE $SQL";

みたいに検索できるとは思うんですが、
項目を増やすために表を作り直さないといけない気がします。

今まで、検索速度や、PHP との連携で深く考えたことがなく、
また、PostgreSQL 以外の使用経験がほとんどないので、
いろいろな環境での経験豊富な方から、設計の基本について、
アドバイスをいただければ幸いです。

-- 
Osamu Shigematsu