次の 4 つのテーブルからデータを取得しています。
ジョブマスター
job_numberclientcol3col4
123 45 blah blah
456 12 blah blah
accompaniment_common (このテーブルに 3 つあるため、f31 と f32 には 3 つのセットが含まれます)
job_numberset_nodate_audit column 4column 5column 3
123 1 2013-04-23 blah blah blah blah blah blah
456 2 2013-04-13 blah blah blah blah blah blah
123 3 2013-04-10 blah blah blah blah blah blah
f31
job_numberparameterratingcommentsset_no
123 1 2 blah blah ble1
123 2 2 blah blah ble1
123 3 1 blah blah ble1
456 1 1 blah blah ble2
456 2 1 blah blah ble2
456 3 2 blah blah ble2
123 1 2 blah blah ble3
123 2 2 blah blah ble3
123 3 1 blah blah ble3
f32
job_numberparameterratingcommentsset_no
123 1 3 blah blah ble1
123 2 1 blah blah ble1
123 3 1 blah blah ble1
456 1 2 blah blah ble2
456 2 3 blah blah ble2
456 3 1 blah blah ble2
123 1 2 blah blah ble3
123 2 2 blah blah ble3
123 3 1 blah blah ble3
私が使用しているクエリは次のとおりです。
SELECT * FROM
(SELECT job_number, set_no, SUM(IF(rating=1,1,0)) as f31yes,
SUM(if(rating=2,1,0)) as f31no FROM f31 GROUP BY job_number, set_no) x
JOIN
(SELECT job_number, set_no, SUM(IF(rating=1,1,0)) as f32yes,
SUM(IF(rating=2,1,0)) as f32no FROM f32 GROUP BY job_number, set_no) y
ON (x.job_number = y.job_number and x.set_no = y.set_no)
JOIN
(SELECT date_audit, job_number, set_no FROM accompaniment_common) z
ON (x.job_number = z.job_number and x.set_no = z.set_no)
JOIN
(SELECT job_number, client FROM job_master) jm
ON (z.job_number = jm.job_number)
WHERE z.date_audit >= '2013-04-01' AND z.date_audit < '2013-05-01'
AND jm.client = 45
HAVING ((f31yes+f32yes)/(f31yes+f32yes+f31no+f32no)) >= 0.9
このクエリを phpMyAdmin で実行すると、2 ~ 3 秒以内に結果が得られます。これは簡単に取得できるように思えますが、これを PHP ファイルに入れて実行すると、完了するまでに5 ~ 6 分かかります。
もちろん、次のようなさまざまなクライアントに対してループで実行します。
$clients = array(45,10,12,13,14,25,60,144);
$total = array();
foreach($clients as $client)
{
$q = mysql_query(// the above query goes here);
$numrows = mysql_num_rows($q);
$total[$client] = $numrows;
}
echo '<pre>';
print_r($array);
echo '</pre>';
phpMyAdmin でかかる時間までに行けば、プロセス全体が 30 秒以内に完了するはずですが、そうではありません。適切な方法でクエリを使用していると思うので、これは不可解です。助言がありますか?
PS : はい、mysql_*
非推奨であることは承知していますが、このプロジェクトを別の会社から引き継いだため、PDO
またはに切り替える十分な時間がありません。mysqli