従業員から入力されたデータを保持する1つのテーブルを更新しようとしています。このテーブルには、エントリID、フィールドID、および値の3つの列があります。私は各エントリに応じて、このテーブルのすべてのフィールドの行があることを確認したいと思います。私は次のようなphp/sqlスクリプトを書いています。思考プロセスは2つの配列(エントリIDとフィールドIDを含む配列)を取得し、入力テーブルを調べてすべてのフィールドとエントリの既存の行があるかどうかを確認しました。そうでない場合は、コマンドにinertを使用して値0の行を追加しますが、このコマンドは失敗しています。私の推測は、この機能の強度によるタイムアウトエラーです。助言がありますか?2つの他のテーブルのデータで1つのmySQLテーブルを更新しようとしていません
$db = JFactory::getDBO(); $field_query = 'SELECT id FROM `jos_directory_field`'; $db->setQuery($field_query); $fields = $db->loadObjectList(); $entry_query = 'SELECT id FROM `jos_directory_entry`'; $db->setQuery($entry_query); $entries = $db->loadObjectList(); for($e=0;$e count($entries);$e++) { for($i=0;$i count($fields);$i++) { $insert_query = 'INSERT INTO `jos_directory_enf` (entry_id,field_id,field_value)'; $insert_query .= 'SELECT '.$entries[$e]->id.','.$fields[$i]->id.',0'; $insert_query .= 'FROM dual WHERE NOT EXISTS (SELECT * FROM `jos_directory_enf`'; $insert_query .= 'WHERE entry_id = '.$entries[$e]->id.' and field_id = '.$fields[$i]->id.')'; $db->setQuery($insert_query); $db->query(); } }
すぐに爆発するか、ハングアップしているように見えますか? –
テーブルのサイズはどれくらいですか?テーブルサイズ(mmm、おそらく多少)のために、PHP自体からメモリが足りなくなる可能性があります。また、あなたは 'COMMIT'レベルで実行していますか? –
DUALという実際のテーブルがありますか?またはこれはORACLE構文のキャリーオーバーですか? – Sparky