以下のコードですが、xxxテーブルからデータを抽出して表示したいのですが、⇒矢印の行を追加すると表示時間が異常に遅くなり、抽出データの量によっては timeout することがあります。表示時間を短くしtimeoutを避けるためにはどうしたらよろしいでしょうか?ご教授お願い致します。
<追記>
create table xxx (id int, AAA varchar(100), BBB varchar(100),CCC varchar(100),DDDvarchar(20));
AAA BBB CCC DDD
====================
チョコ 170円 菓子類 111A
チョコ 160円 菓子類 111A
アイス 200円 アイス類 111B
ざっくりいうと、DDDの値が同一なら、AAAの値を重複させずに表示させたいのです。
(表示結果が「チョコ、チョコ、アイス」ではなく「チョコ、アイス」にしたい)
php
1<?php 2 3 $pdo = new PDO("mysql:host=xxx; dbname=db; charset=utf8", "xxx", "pass", array( PDO::ATTR_EMULATE_PREPARES => false ) ); 4 $sql = "select * from xxx where 1 = 1 "; 5 $condition = array(); 6 7 if( !empty( $_REQUEST["drug"] ) ){ 8 $sql = $sql . " and ( AAA like :aaa or BBB like :bbb or CCC like :ccc ) "; 9 ⇒$sql = $sql . " and ( id IN(SELECT min(id) FROM xxx GROUP BY DDD) ) "; 10 11 $condition[":aaa"] = "%{$_REQUEST["aaa"]}%"; 12 $condition[":bbb"] = "%{$_REQUEST["bbb"]}%"; 13 $condition[":ccc"] = "%{$_REQUEST["ccc"]}%"; 14 15 } 16 17 $statement = $pdo->prepare( $sql ); 18 $statement->execute( $condition ); 19 $results = $statement->fetchAll(); 20 21foreach ($results as $result) { 22 23print $result['AAA']; 24} 25?> 26
回答2件
あなたの回答
tips
プレビュー