- ベストアンサー
PHPでのクエリ投げる回数とDBの負荷について
- PHPでのクエリ投げる回数とDBの負荷について考えています。エクセルで作ったような縦横型のリレーショナル構造で、各列の一番大きな値を赤文字にしたいと思っています。
- (1)1回のクエリで全体を取得し、連想配列などにいれて各列をソートして1番大きな値を探す方法と、(2)必要な回数分、適したクエリを投げて、結果を変数に格納し、IDなどで一致させる方法を考えています。
- (1)の場合は、DBに負荷がかからないかもしれませんが、多彩なフィルタやソートを使わずに、DBを使う意味があるのか考えてしまいます。一方、(2)の場合、列数が多いと1ページを表示させるために多数のDBアクセスが必要となるため、運用上の問題も考えられます。一般的なアプローチなどがあれば教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
複数列というのがちょっと面倒なところですが こんな感じでどうでしょう? //元データ CREATE TABLE tbl (id int not null primary key,d1 int,d2 int,d3 int,d4 int,d5 int,index(d1,d2,d3,d4,d5)); INSERT INTO tbl VALUES(1,1,2,3,4,2),(2,5,4,3,2,1),(3,4,2,1,5,3),(4,2,4,5,1,1),(5,3,2,1,1,2),(6,1,1,1,5,1),(7,2,3,1,5,1); //集計 SELECT id ,d1,COALESCE((d1=m1),0) as f1 ,d2,COALESCE((d2=m2),0) as f2 ,d3,COALESCE((d3=m3),0) as f3 ,d4,COALESCE((d4=m4),0) as f4 ,d5,COALESCE((d5=m5),0) as f5 FROM tbl LEFT JOIN (SELECT MAX(d1) as m1,MAX(d2) as m2,MAX(d3) as m3,MAX(d4) as m4,MAX(d5) as m5 FROM tbl) as sub ON d1=m1 or d2=m2 or d3=m3 or d4=m4 or d5=m5 ORDER BY id
その他の回答 (1)
- kosukejlampnet
- ベストアンサー率44% (126/282)
自分でしたら、以下のテーブルがあったとき、 CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `value` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ); INSERT INTO `test` (`id`, `value`) VALUES (1,10), (2,20), (3,29), (4,3), (5,28), (6,18), (7,11); まず第一に試すのはこのクエリ select id , value , (value = (select max(value) from test)) as flg from test 次に試すのがこの2つのクエリの組み合わせ。 select id, max(value) from test; select id, value from test; で、早い方を採用。